Esto es lo que uso. Utiliza procfs (por lo que está limitado a Unix como sistemas, no funcionará en Mac, creo) y el glob mencionado anteriormente. También obtiene la línea de cm, que le permite identificar el proceso. Para matar el proceso, puede usar os.kill(signal.SIGTERM, pid)
. Para el uso de sub-proceso, por favor marque este post Python, Popen and select - waiting for a process to terminate or a timeout
def list_processes():
"""
This function will return an iterator with the process pid/cmdline tuple
:return: pid, cmdline tuple via iterator
:rtype: iterator
>>> for procs in list_processes():
>>> print procs
('5593', '/usr/lib/mozilla/kmozillahelper')
('6353', 'pickup -l -t fifo -u')
('6640', 'kdeinit4: konsole [kdeinit]')
('6643', '/bin/bash')
('7451', '/usr/bin/python /usr/bin/ipython')
"""
for pid_path in glob.glob('/proc/[0-9]*/'):
# cmdline represents the command whith which the process was started
f = open("%s/cmdline" % pid_path)
pid = pid_path.split("/")[2] # get the PID
# we replace the \x00 to spaces to make a prettier output from kernel
cmdline = f.read().replace("\x00", " ").rstrip()
f.close()
yield (pid, cmdline)
sí estoy idealmente después de un biblioteca de nivel más alto que analizar manualmente ps – hoju
Ejecutar el comando 'ps' dentro de una cáscara es mucho más peligrosa que la nota de tylerl sobre el uso de/proc. Haz eso en cambio. –
¿cómo puede ser peligroso? – hoju