encontrar un determinado proceso

luis miguel morillas en posta.unizar.es
Jue Sep 5 18:30:52 CEST 2002


	Asunto: [Python-es] RE: encontrar un determinado proceso
	Fecha: mié, sep 04, 2002 at 11:48:07 +0200


Citando a  Hernan Martinez Foffani (hernan en orgmf.com.ar):
> > he estado viendo la documentacion y he visto como matar un
> > proceso, como ejecutarlo con path, sin
> > el, con parametros, esperar por uno y demas, pero no encuentro
> > como puedo saber si un cierto
> > proceso esta ejecutando.
> >
> > Lo que yo quiero hacer es ver si un determinado proceso esta
> > ejecutando (por ejemplo el apache) y
> > si no lo esta, arrancarlo de nuevo. Ahora solo veo la posibilidad
> > por ejecutar un comando unix
> > para ver los procesos y luego ya lo arrancare, pero claro,
> > tampoco se como ver los procesos que
> > estan ejecutando en windows :( solo con el ctrl-alt-supr :)
> 
> eso depende de cada sistema operativo.  en algunos hay un system
> call, en otros se puede leer la tabla de procesos como si fuera
> un dispositivo, y en otros solo podés hacerlo analizando la
> salida de algun comando.
> ¿alguien sabe si ya se hay alguna API estandar?
> 

Yo no conozco nada estandar. En Linux sólo se me ocurre tirar de línea de 
comandos (el módulo commnads puede ser útil) ps aux.
En Windows no tengo mucha experiencia, pero en las extensiones de win32 
de Mark Hammond viene un ejemplo (killProcName.py) donde busca el nombre 
de un proceso en ejecución, crea el 'handle' y lo elimina.

Mando el ejemplo por si puede interesar.

Un saludo

Luis Miguel.
------------ próxima parte ------------
# Kills a process by process name
#
# Uses the Performance Data Helper to locate the PID, then kills it.
# Will only kill the process if there is only one process of that name
# (eg, attempting to kill "Python.exe" will only work if there is only
# one Python.exe running.  (Note that the current process does not
# count - ie, if Python.exe is hosting this script, you can still kill
# another Python.exe (as long as there is only one other Python.exe)

# Really just a demo for the win32pdh(util) module, which allows you
# to get all sorts of information about a running process and many
# other aspects of your system.

import win32api, win32pdhutil, win32con, sys

def killProcName(procname):
	# Change suggested by Dan Knierim, who found that this performed a
	# "refresh", allowing us to kill processes created since this was run
	# for the first time.
	try:
		win32pdhutil.GetPerformanceAttributes('Process','ID Process',procname)
	except:
		pass

	pids = win32pdhutil.FindPerformanceAttributesByName(procname)

	# If _my_ pid in there, remove it!
	try:
		pids.remove(win32api.GetCurrentProcessId())
	except ValueError:
		pass

	if len(pids)==0:
		result = "Can't find %s" % procname
	elif len(pids)>1:
		result = "Found too many %s's - pids=`%s`" % (procname,pids)
	else:
		handle = win32api.OpenProcess(win32con.PROCESS_TERMINATE, 0,pids[0])
		win32api.TerminateProcess(handle,0)
		win32api.CloseHandle(handle)
		result = ""

	return result

if __name__ == '__main__':
	if len(sys.argv)>1:
		for procname in sys.argv[1:]:
			result = killProcName(procname)
			if result:
				print result
				print "Dumping all processes..."
				win32pdhutil.ShowAllProcesses()
			else:
				print "Killed %s" % procname
	else:
		print "Usage: killProcName.py procname ..."


Más información sobre la lista de distribución Python-es