如何在不从PHP调用ps的情况下检查指定的PID当前是否正在运行?

ano*_*one 34 php pid process

我们想检查当前是否通过PHP运行指定的进程.

我们想简单地提供一个PID并查看它当前是否正在执行.

PHP有一个内部函数可以提供给我们这些信息,还是我们必须从"ps"输出中解析它?

Nas*_*ine 72

如果您使用的是Linux,请尝试以下操作:

if (file_exists( "/proc/$pid" )){
    //process with a pid = $pid is running
}
Run Code Online (Sandbox Code Playgroud)

  • 如果您想以独立于操作系统的方式执行此操作,则可以使用posix函数.例如posix_getpgid(参见游荡僵尸) (8认同)
  • 如果指定的文件OR目录存在,则@ anonymous-one file_exists()返回true. (6认同)
  • 请注意:我们实际上必须使用is_dir作为/ proc/PID是一个目录...而不是文件. (5认同)

Wan*_*bie 39

posix_getpgid($pid); 进程未运行时将返回false

  • 这适用于我的目的 - 设置锁定,防止在锁定表中存在pid时运行相同的脚本.谢谢. (2认同)

Ste*_*ain 15

如果你想拥有它的功能,那么:

$running = posix_kill($pid,0);
Run Code Online (Sandbox Code Playgroud)

使用进程标识符pid将信号sig发送到进程.

如果进程正在运行,则posix_kill使用0 kill信号调用将返回true,false否则返回.

  • 这对于用户无权访问的进程不起作用(例如,以“root”身份运行的守护进程,而运行脚本的用户是“www-data”)(请参阅/sf/answers/1104233091/ 593868) (2认同)