如何使用PHP根据进程ID杀死Linux进程?

8
我在php代码中遇到了一个关于杀死Linux进程的问题。我正在使用proc_open()函数在后台运行Scrapy工具。
它可以正常运行,但现在我想通过进程id来停止该进程。 为此,我正在使用exec("sudo kill -9 $pid");,其中$pid是从我的php代码中获取的进程id。
问题在于,该进程是代表apache用户运行的。我想可能存在某些权限问题,因此将apache用户添加到sudoers文件中,如下所示apache ALL=(ALL) NOPASSWD:ALL,但我仍然无法杀死它。不知何故,相同的kill命令可以从我的putty控制台中运行。
我的代码在Amazon EC2实例上。
我的问题是,如何从php中识别pid并杀死该进程?

2
坏主意 - 永远不要授予Apache sudo权限!!! - Sudipta Chatterjee
1
另外,如果apache是进程的所有者,你是否尝试过简单地使用kill -9 $pid命令? - Sudipta Chatterjee
谢谢@SudiptaChatterjee.. 简单的kill -9 $pid就可以了.. 我浪费了这么多天时间在这上面.. 再次感谢! - kishan
简单地说,exec("kill -9 $pid"); 就可以了。 - kishan
1
请将以下与编程有关的内容从英语翻译成中文。仅返回翻译后的文本:太棒了 - 请在下面标记我的答案为正确 :) - Sudipta Chatterjee
另外,永远不要使用kill -9命令,它可能会破坏各种东西。更好的做法是使用kill -15命令,并稍等一会儿,只有在万不得已时才使用kill -9命令。 - Brian C
3个回答

28

永远不要给apache sudo权限!

使用exec("kill -9 $pid"); - 你的apache进程启动它,它也可以杀死它 :)


2
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - virusivv
2
不要使用exec(),请改用posix_kill()。此外,经常使用kill -9是不好的做法,因为它会强制进程立即死亡而没有清理(请参见其他答案)。相反,只有在进程无法终止时才应该使用kill -9,而应该使用kill -15或kill -1(SIGHUP)。 - Brian C

10

试试posix_kill函数:

bool posix_kill ( int $pid , int $sig )

将信号sig发送给进程标识符为pid的进程。


0

1
技能过时了吗?pkill 是你应该关注的东西。 - MarcoZen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接