【问题标题】:Kill all relevant processes in a PHP script in Linux在 Linux 中杀死 PHP 脚本中的所有相关进程
【发布时间】:2012-06-17 10:45:15
【问题描述】:

假设我有一个 PHP 脚本,

//main.php -> PID = 1002
<?php 
exec('ProcessOne');
exec('ProcessTwo');
//... many other exec calls
?>

main.php 创建了许多其他进程,它们有自己的 pid,可能不会被脚本记录/跟踪,但 main.php 的 pid 是已知的。

我的问题是:我如何通过只知道 main.php 的 pid(在我的示例中为 1002)来杀死所有由 main.php(包括 main.php)创建的进程?

脚本应该在 Linux 中运行。

谢谢

【问题讨论】:

  • 如何在 linux shell 中杀死一个进程?您将如何确定子进程? (这个问题与php无关)
  • 感谢您的回复。我如此详细地描述它的原因是因为在 php 中使用 exec 可能会给进程带来比我知道的更多的关系:相同的组 id?或其他我可能不知道但可能对解决问题有用的东西。

标签: php linux bash shell process


【解决方案1】:
pkill -TERM -P 1002

pkill -P PID 为您提供所有子进程,-TERM 向所有子进程发送 TERM 信号。

杀死孩子的孩子:

kill `pstree -p 1002 | sed 's/(/\n(/g' | grep '(' | sed 's/(\(.*\)).*/\1/' | tr "\n" " "`

Walking a process tree修改的版本。

【讨论】:

  • 感谢您的回答,但使用 pkill -TERM -P 1002 只会杀死 pid 1002 的直接子进程。假设 ProcessOne 也有其他子进程正在运行,我们应该怎么做才能杀死所有给定的子进程pid 1002?谢谢
猜你喜欢
  • 2012-11-22
  • 2019-01-31
  • 2014-08-09
  • 1970-01-01
  • 2013-07-24
  • 1970-01-01
  • 2013-06-30
  • 1970-01-01
  • 2011-09-12
相关资源
最近更新 更多