如何使用 php 中的 pid 杀死 linux 进程?
Posted
技术标签:
【中文标题】如何使用 php 中的 pid 杀死 linux 进程?【英文标题】:How to kill a linux process using pid from php? 【发布时间】:2013-10-14 21:53:12 【问题描述】:我面临一个关于从我的 php 代码中终止 Linux 进程的问题。
我在后台使用 proc_open()
函数从我的 php 代码运行 Scrapy 工具。
它工作正常,但现在我想使用它的进程 ID 终止这个进程。
为此,我使用exec("sudo kill -9 $pid");
,其中$pid
是我从我的php 代码中获取的进程ID。
问题是这个进程代表 apache 用户运行。我认为可能存在一些权限问题,所以我将 apache 用户添加到 sudoers 文件中,就像 apache ALL=(ALL) NOPASSWD:ALL
一样,但我仍然无法杀死它。不知何故,相同的 kill 命令可以在我的 putty 控制台上运行。
我的代码在 Amazon EC2 实例上。
我的问题是,我怎样才能杀死由 php 中的 pid 标识的进程?
【问题讨论】:
坏坏主意 - 永远不要授予 apache sudo 权限!!! 另外,如果apache
是进程的所有者,您是否尝试过简单的kill -9 $pid
?
谢谢@SudiptaChatterjee .. 简单地杀死 -9 $pid 工作.. 我在这上面浪费了这么多天.. 再次感谢!
简单地说,exec("kill -9 $pid");工作..
太棒了 - 请在下面将我的答案标记为正确:)
【参考方案1】:
永远不要给 apache sudo
权限!
使用exec("kill -9 $pid");
- 你的apache进程启动了它,它可以杀死它:)
【讨论】:
我不能用 exec 来做,所以我只需要使用 shell_exec 但无论如何感谢它对我帮助很大:) 不要为此使用exec()
,而是使用posix_kill()
。此外,经常使用 kill -9 是一种不好的做法,因为它会强制进程在没有清理的情况下立即终止(请参阅其他答案)。相反,将 kill -9 保留为进程不会死亡的时间。使用 kill -15 或 kill -1 (SIGHUP)。【参考方案2】:
试试posix_kill
:
bool posix_kill ( int $pid , int $sig )
将信号 sig 发送到进程标识符为 pid 的进程。
【讨论】:
【参考方案3】:您可以使用具有 sudo 权限的 exec 来获得更安全的技能,请查看 kill users processes in linux with php
感谢和问候, 阿洛克·撒克
【讨论】:
技能过时了? pkill 是你应该看的东西。以上是关于如何使用 php 中的 pid 杀死 linux 进程?的主要内容,如果未能解决你的问题,请参考以下文章