2

我正在一个 PHP 脚本中使用 proc_open 创建一个进程。

我如何在另一个脚本中终止它。我无法传递 proc_open 返回的资源。

我也尝试使用 proc_get_status() ,它返回 ppid 。我没有得到孩子们的pid。

开发环境:WAMP

任何意见表示赞赏。

4

4 回答 4

3

我建议您重新检查您的模型,以确保您实际上必须从其他地方终止该过程。除了最琐碎的情况外,您的代码将变得越来越难以调试和维护。

为了保持封装状态,您可以发出要终止的进程信号,并在要终止的进程中正常退出。否则,您可以使用普通 IPC 发送一条消息:“嘿,伙计。请关闭。”

编辑:对于第 2 段,您最终可能仍会启动一个脚本来执行此操作。没关系。您要避免的是 kill -9 类型的事情。相反,让进程优雅地退出。

于 2009-09-07T12:10:33.867 回答
3

要在纯 PHP 中做到这一点,这里是解决方案:

posix_kill($pid, 15); // SIGTERM = 15
于 2013-12-20T11:37:27.177 回答
0

你可以使用一些方法来创建进程,这个方法通常返回新进程的PID。

这对你有用吗?:

$process = proc_open('php', $descriptorspec, $pipes, $cwd, $env);
$return_value = proc_close($process);
于 2009-09-07T12:00:17.783 回答
0

你最好使用这样的东西来启动你的其他进程:

$pid = shell_exec("nohup $Command > /dev/null 2>&1 & echo $!");

那里将执行该进程,并为您提供一个正在运行的进程 ID。

exec("ps $pid", $pState);     
$running = (count($pState) >= 2);    

终止你总是可以使用

exec("kill $pid");

但是,您不能杀死不属于 PHP 运行的用户所拥有的进程——如果它以无人身份运行——您将以无人身份启动新进程,并且只能杀死在无人用户下运行的进程。

于 2009-09-07T12:06:39.673 回答