Pregunta
Estoy creando un proceso que utiliza proc_open en un script PHP.
¿Cómo termino esto en otro guión. No soy capaz de pasar el recurso devuelto por el proc_open.
También intentado usar proc_get_status (), que devuelve el ppid. No entiendo el pid de los niños.
env desarrollo: WAMP
Cualquier entrada es apreciado.
Solución
Le recomiendo que vuelva a examinar su modelo para asegurarse de que realmente tienes que matar el proceso de otro lugar. Su código obtendrá cada vez más difícil de depurar y mantener en todo menos en las circunstancias más triviales.
Para mantenerlo encapsulado, se puede indicar el proceso que desea terminar y con gracia salir en el proceso que desea matar. De lo contrario, puede utilizar IPC normal a enviar un mensaje que dice: ". Oye, amigo cerrar, por favor"
Editar: para el segundo párrafo, es posible que aún así terminar el lanzamiento de una secuencia de comandos para hacer esto. esta bien. lo que se quiere evitar es un kill -9 tipo de cosas. en cambio, que el proceso de salida con gracia.
Otros consejos
Para hacer eso en PHP puro, aquí está la solución:
posix_kill($pid, 15); // SIGTERM = 15
Se puede utilizar algún método para crear proceso, por lo general este método devuelve el PID del nuevo proceso.
¿Tiene esto funciona para usted? :
$process = proc_open('php', $descriptorspec, $pipes, $cwd, $env);
$return_value = proc_close($process);
factible es usar algo como esto para poner en marcha su otro proceso:
$pid = shell_exec("nohup $Command > /dev/null 2>&1 & echo $!");
Esto no habría ejecutar el proceso, y le dará un ID de proceso en ejecución.
exec("ps $pid", $pState);
$running = (count($pState) >= 2);
para terminar siempre se puede utilizar
exec("kill $pid");
Sin embargo, no puedes matar procesos no son propiedad de las carreras de PHP al usuario - si se ejecuta como nadie - usted comenzará el nuevo proceso como nadie, y sólo ser capaz de matar a los procesos que se ejecutan con el usuario nobody