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

Janko Hauser jhauser at zscout.de
Fr Dez 21 19:46:36 UTC 2007


Ich denke das richtige Modul dafür wäre

http://www.psychofx.com/psi/trac/wiki/

Gruß und ein frohes Weihnachtsfest,

__Janko

Am 21.12.2007 um 18:48 schrieb robert rottermann:

> 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
>
>
> <robert.vcf>_______________________________________________
> python-de maillist  -  python-de at python.net
> http://python.net/mailman/listinfo/python-de



-- 
Janko Hauser  email:  jhauser at zscout.de
               mobile: +49 1721 641552