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