[python] Jak získat název procesu když znám PID procesu

azurIt azurit na pobox.sk
Sobota Březen 10 19:49:43 CET 2012


Ahoj,

v adresari /proc/<PID>/ najdes vsetky potrebne udaje. Mimochodom, podla mojho nazoru existuju ovela lepsie sposoby, ako zarucit, aby sa aplikacia nespustila 2x sucasne. Ja najcastejsie pouzivam vytvorenie 'PID suboru', ktory pri spusteni uzamknem cez fcntl.flock(). Uzamknutie je samozrejme mozne len raz, takze kazde dalsie spustenie danej splikacie zlyha. Subor je nutne pri ukonceni samozrejme odomknut (toto ale za teba urobi aj OS).

import sys
import fcntl

file_obj_lock = open("app.pid", "w")
try:
	fcntl.flock(file_obj_lock, fcntl.LOCK_EX | fcntl.LOCK_NB)
except IOError:
	file_obj_lock.close()
	sys.exit()
....
....
fcntl.flock(file_obj_lock, fcntl.LOCK_UN | fcntl.LOCK_NB)
file_obj_lock.close()


azur



______________________________________________________________
> Od: "\Ing. Vladislav Ludík\" <vlada na ludik.cz>
> Komu: Konference PyCZ <python na py.cz>
> Dátum: 10.03.2012 19:13
> Predmet: [python] Jak získat název procesu když znám PID procesu
>
>Zdravím všechny.
>
>Spouštím pythonovský program.py (pod Linuxem) a chci zajistit jeho 
>stabilní chod i v nepředvídatelných režimech.
>Zatím to dělám tak, že program o sobě dává vědět a jiný program check.py 
>to kontroluje.
>program.py je trvale spuštěn. Pokud check.py nedostane správnou odpověď 
>a včas, nastartuje jej znovu.
>Při testech jsem zjistil, že občas po nepředpokládané chybě program 
>neodpoví jak má, popřípadě včas.
>
>Abych vyloučil dvojí spuštění, hlídám jeho název a PID procesu:
>
>_prg = os.path.basename(sys.argv[0])   # název
>_pid = os.getpid()                                 # PID
>
>Potřebuji zjistit podle názvu a PIDu, zda je spuštěný a existuje.
>Zatím to dělám přes subprocess, příkaz ps -d
>
>cmd = ["ps", "-d"]
>proces = subprocess.Popen(cmd, stdout = subprocess.PIPE)
>proces.wait()
>out = proces.stdout.read()
>
>out pak čtu a hledám potřebné.
>
>Mimochodem linuxovský příkaz ps -d | grep program.py, který by 
>vyfiltroval jen to co hledám, funguje pod linuxem, ale přes subprocess ne.
>Hlásí:  ERROR: Garbage option.
>
>Takže k mému konkrétnímu dotazu:
>
>existuje nějaký os příkaz nalezení PID podle jména programu ?
>
>Díky
>
>V.L.
>
>_______________________________________________
>Python mailing list
>Python na py.cz
>http://www.py.cz/mailman/listinfo/python
>


Další informace o konferenci Python