[Python-de] feststellen ob ein prozess läuft
Ulrich Berning
ulrich.berning at denviso.de
Fr Dez 21 14:12:01 UTC 2007
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