如何终止进程

时间:2009-09-07 11:47:40

标签: php kill-process

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

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

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

开发环境:WAMP

赞赏任何意见。

4 个答案:

答案 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下运行的进程。