[Python-de] feststellen ob ein prozess läuft

robert rottermann robert at redcor.ch
Fr Dez 21 17:48:13 UTC 2007


Ulrich Berning schrieb:
> Andreas Jung wrote:
> 
>>
>> --On 21. Dezember 2007 12:30:03 +0100 Ulrich Berning 
>> <ulrich.berning at denviso.de> wrote:
>>
>>> robert rottermann wrote:
>>>
>>>> Hallo,
>>>>
>>>> ich möchte feststellen, ob ein prozess noch läuft, von dem id die
>>>> pzess-id kenne.
>>>>
>>>> z.Z. mache ich das so, dass ich mir mit ps alle prozesse ausgeben
>>>> lasse, und dann scanne.
>>>>
>>>> gibt es da eine einfachere bzw bessere methode?
>>>>
>>>> danke für hinweise
>>>
>>> Wie wär's hiermit:
>>>
>>> ------------
>>> import os, signal, errno
>>>
>>> def processIsAlive(pid):
>>>     try:
>>>         os.kill(pid, signal.SIG_DFL)  # Check existence of pid
>>>     except os.error, args:
>>>         if args.errno == errno.ESRCH: # No such process
>>>             return False
>>>         raise                         # Any other error
>>>     return True
>>>
>>> if __name__ == '__main__':
>>>     print processIsAlive(os.getpid())
>>>     print processIsAlive(22222222)
>>
>>
>> Damit überprüfst Du, ob der Prozess noch lebt aber Du kannst damit
>> nicht testen, ob der Prozesse eigentlich noch der richtige ist, den Du 
>> eigentlich testen möchtest...Da ist selbst die Methode über ps 
>> -auxw|grep ....sicherer als das bisher genannte.
>>
>> -
>> aj
> 
> Wenn wir es schon so genau nehmen, dann gibt ps -auxw| grep .... auch 
> nicht mit Sicherheit den Prozess zurück, nach dem ich suche, denn die 
> Prozess-ID könnte ja für einen Prozess neu vergeben sein, bei dem grep 
> das gleiche Ergebnis liefert. Außerdem kann sich die Aufrufsyntax von ps 
> von Release zu Release ändern. Portabel ist es sowieso nicht, es würde 
> nur unter Linux laufen. Aber entgegen der scheinbar weit verbreiteten 
> Ansicht gibt es durchaus noch Systeme wie AIX, IRIX, Solaris, HP-UX, 
> BSD, etc., die müssen dann leider draußen bleiben.
> 
> Da die Prozess-ID ja bekannt ist, gehe ich davon aus, daß das aufrufende 
> Programm den Prozess selbst gestartet hat. Also wenn wir absolute 
> Gewißheit brauchen, dann eben mit fork(), exec(), wait() oder waitpid().
> 
> Frohe Weihnachten
> Ulli

also, die diskussion ist sehr interessant,

was ich mache, ist eine einige (potentiell 2-3 duzend) prozesse starten
die als dämonen laufen. die pid wird jeweils in eine datei geschrieben.
die prozesse werden je nach bedarf gestoppt und wieder neu gestartet,
was ich brauche ist eine tabelarische übersicht welche prozesse laufen,
parameter wie sie gestartet wurden usw.

ich denke alle hier erwähnten ansätze sind bestens geeignet,
festzustellen ob der prozess noch lebt. "fehlalarme" sind unkritisch.
wie gesagt, ich machte das seit langem durch scannen des outputs von ps,
aber das schien mir sehr "unelegant".

danke
robert


-------------- nächster Teil --------------
Ein Dateianhang mit Binärdaten wurde abgetrennt...
Dateiname   : robert.vcf
Dateityp    : text/x-vcard
Dateigröße  : 211 bytes
Beschreibung: nicht verfügbar
URL         : http://python.net/pipermail/python-de/attachments/20071221/a541ddfc/attachment-0001.vcf