我正在一个PHP脚本中使用proc_open创建一个进程。
如何在另一个脚本中终止此操作。我无法传递proc_open返回的资源。
我也尝试过使用proc_get_status(),它返回ppid。我没有孩子的pid。
开发环境:WAMP
赞赏任何意见。
答案 0 :(得分:3)
我建议您重新检查您的模型,以确保您实际上必须从其他地方杀死该进程。除了最微不足道的情况之外,您的代码将越来越难以调试和维护。
为了保持封装,您可以发出希望终止的进程的信号,并在要杀死的进程中正常退出。否则,你可以使用普通的IPC发送一条消息:“嘿,哥们。请关闭。”
编辑:对于第2段,您可能仍然会启动脚本来执行此操作。没关系。你想要避免的是kill -9类型的东西。相反,让流程优雅地退出。
答案 1 :(得分:3)
要在纯PHP中执行此操作,以下是解决方案:
posix_kill($pid, 15); // SIGTERM = 15
答案 2 :(得分:0)
您可以使用某种方法来创建流程,此方法通常会返回新流程的PID。
这对你有用吗? :
$process = proc_open('php', $descriptorspec, $pipes, $cwd, $env);
$return_value = proc_close($process);
答案 3 :(得分:0)
你最好使用这样的东西启动你的其他过程:
$pid = shell_exec("nohup $Command > /dev/null 2>&1 & echo $!");
将执行该过程,并为您提供正在运行的进程ID。
exec("ps $pid", $pState);
$running = (count($pState) >= 2);
终止你总是可以使用
exec("kill $pid");
但是,你不能杀掉PHP运行的用户所拥有的进程 - 如果它作为nobody运行 - 你将以无人启动新进程,并且只能杀死在用户nobody下运行的进程。