example - subprocess python español
Abriendo un proceso con Popen y obteniendo el PID. (1)
Estoy trabajando en una pequeña función ingeniosa:
def startProcess(name, path):
"""
Starts a process in the background and writes a PID file
returns integer: pid
"""
# Check if the process is already running
status, pid = processStatus(name)
if status == RUNNING:
raise AlreadyStartedError(pid)
# Start process
process = subprocess.Popen(path + '' > /dev/null 2> /dev/null &'', shell=True)
# Write PID file
pidfilename = os.path.join(PIDPATH, name + ''.pid'')
pidfile = open(pidfilename, ''w'')
pidfile.write(str(process.pid))
pidfile.close()
return process.pid
El problema es que process.pid
no es el PID correcto. Parece que siempre es 1 más bajo que el PID correcto. Por ejemplo, dice que el proceso comenzó en 31729, pero ps
dice que se está ejecutando en 31730. Cada vez que lo he intentado está apagado por 1. Supongo que el PID que devuelve es el PID del proceso actual , no el iniciado. , y el nuevo proceso obtiene el ''siguiente'' pid que es 1 más alto. Si este es el caso, no puedo confiar en el process.pid + 1
devolución.pid process.pid + 1
ya que no tengo ninguna garantía de que siempre será correcto.
¿Por qué process.pid
no devuelve el PID del nuevo proceso y cómo puedo lograr el comportamiento que busco?
De la documentación en http://docs.python.org/library/subprocess.html :
Popen.pid El ID de proceso del proceso hijo.
Tenga en cuenta que si establece el argumento de shell en Verdadero, este es el ID de proceso del shell generado.
Si el shell
es falso, debería comportarse como esperas, creo.