如何使用 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 进程?的主要内容,如果未能解决你的问题,请参考以下文章

怎么样结束关闭linux/ubuntu系统中的进程

教你如何找到正在运行中的进程 ID 并杀死它

linux下 用啥命令查看进程?如何杀死进程?

linux中如何根据PID获得进程?

linux操作系统下,怎么使用kill按照PID一次杀死多个进程

《Linux学习并不难》进程管理:杀死进程之kill命令