【问题标题】:kill a linux process in php在php中杀死一个linux进程
【发布时间】:2014-05-29 07:06:16
【问题描述】:

我正在编写一个用于远程控制连接到 linux pc 的一些进程和设备的 php 代码。代码是用python编写的。我可以运行脚本和程序usnig php函数,例如exec()system(),但我不能杀死我的进程。

我想杀死蟒蛇:

<?php 
$PID = exec("pidof python");
echo $PID;
$kill = "kill " . $PID;
exec($kill);
?>

它返回正确的 PID 号,但不会终止进程。 我也试过exec("kill #PIDnum");,但它不起作用。

有什么建议吗?

提前致谢

【问题讨论】:

  • 您是否拥有这样做的正确权限?
  • PHP 服务器通常不以 root 身份运行,而是以nobody、www、web 等身份运行。
  • 您需要 root 权限才能执行此操作。但我认为没有充分的理由从 PHP 中终止进程。
  • 具有完整根权限的 PHP。那里什么都不会出错:-)
  • 谢谢,我会检查权限;但是为什么从 PHP 中杀死一个进程不是一个很好的理由呢?它会带来更多问题吗?

标签: php linux


【解决方案1】:

您只能从 PHP 中杀死由在您的系统上运行 Web 服务器的用户 ID 拥有的进程,该用户 ID 通常设置为“nobody”、“www”、web 等低权限帐户。

如果 python 是从 PHP 脚本启动的,它可以工作。但除此之外,没有。

解决方法是在 PHP 文件中添加行,该文件包含要终止的 PID 列表。这不会杀死进程,您需要使用 bash 或 perl、python 等语言编写一个单独的脚本来执行此操作。让 cron 以 root 身份运行该脚本,定期读取文件并杀死PID。但是,它不会是瞬间的。不过,您可以设置 cron 以每分钟运行一次这样的脚本。

【讨论】:

  • 保罗的出色回答。仅供参考:如果您希望立即终止进程(而不是等待 cron 作业下一次运行),那么您可以将终止进程的脚本作为守护进程而不是 cron 作业运行。
  • 或者在非技术术语中,不要将 cron 用于实际执行杀戮的根脚本,而是在 /etc/rc.local 中启动它,并使其成为while(1) 循环永远循环,每次运行后休眠几秒钟。
猜你喜欢
  • 1970-01-01
  • 2014-10-03
  • 2011-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-12
  • 1970-01-01
相关资源
最近更新 更多