【问题标题】:How to kill a linux process using pid from php?如何使用 php 中的 pid 杀死 linux 进程?
【发布时间】: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");工作..
  • 太棒了 - 请在下面将我的答案标记为正确:)

标签: php linux apache amazon-ec2


【解决方案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 是你应该看的东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-31
    • 1970-01-01
    • 1970-01-01
    • 2022-08-22
    • 2013-11-12
    • 2011-09-12
    • 2016-03-06
    相关资源
    最近更新 更多