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

29 浏览
0 Comments

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

我们想通过PHP检查指定的进程是否正在运行。

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

PHP是否有内部函数可以提供这个信息,还是我们必须从“ps”输出中解析出来?

0
0 Comments

在PHP中,我们想要检查指定的进程ID(PID)是否正在运行,但是不想通过调用ps命令来实现。解决这个问题的方法是使用posix_kill函数。

$running = posix_kill($pid, 0);

调用posix_kill函数并传入0作为信号参数,如果进程正在运行,该函数将返回true;否则返回false。

需要注意的是,这种方法对于用户无法访问的进程是无效的,比如一个以root身份运行的守护进程,而执行脚本的用户是www-data用户。

0
0 Comments

在PHP中,如何检查指定的PID是否正在运行而不调用ps命令?

在PHP中,有时我们需要检查指定的进程ID(PID)是否正在运行。通常,我们可以使用ps命令来检查进程是否存在,但是这种方法需要调用外部命令,可能会影响性能。因此,我们需要找到一种在不调用ps命令的情况下检查PID是否在运行的方法。

一个解决方案是使用posix扩展提供的函数。具体来说,可以使用posix_getpgid函数来检查指定的PID是否正在运行。当进程存在时,该函数将返回PID的进程组ID,当进程不存在时,该函数将返回false。

以下是一个示例代码片段,演示如何使用posix_getpgid函数来检查PID是否正在运行:

$pid = 1234; // 指定的PID
$pgid = posix_getpgid($pid); // 检查PID是否在运行
if ($pgid === false) {
    echo "指定的PID $pid 不在运行";
} else {
    echo "指定的PID $pid 正在运行,进程组ID为 $pgid";
}

这个解决方案适用于大多数情况下,特别是在需要在同一脚本中阻止多个实例同时运行的情况下。然而,需要注意的是,如果用户对指定的PID没有访问权限,那么posix_getpgid函数可能无法正常工作。

,我们可以使用posix_getpgid函数来检查指定的PID是否正在运行,而不调用ps命令。这种方法可以提高性能,并且适用于大多数情况下。但是,需要注意用户对指定PID的访问权限,以免出现问题。

0
0 Comments

在PHP中,我们想要检查指定的进程ID(PID)是否正在运行,而不需要调用ps命令。根据上述内容,我们可以得出出现该问题的原因以及解决方法。

问题的原因是我们需要在PHP中检查指定的PID是否正在运行,而不想使用ps命令。通常情况下,我们可以使用ps命令来获取正在运行的进程列表,并检查指定的PID是否在列表中。然而,由于某些原因,我们可能无法或不想使用ps命令。

解决方法是使用Linux系统的/proc目录。在Linux系统中,每个正在运行的进程都有一个与之对应的目录,目录的名称就是进程的PID。因此,我们可以使用file_exists函数来检查指定的PID是否对应一个存在的目录。如果存在,则说明该进程正在运行。

具体的解决方法如下所示:

if (is_dir( "/proc/$pid" )) {
    // 进程PID为$pid的进程正在运行
}

需要注意的是,我们使用is_dir函数来判断/proc/PID是否是一个目录,而不是一个文件。因为在Linux系统中,/proc/PID实际上是一个目录。

此外,还有一种跨操作系统的解决方法,即使用posix函数。posix函数是一组用于处理进程的函数,可以在不同的操作系统上使用。例如,可以使用posix_getpgid函数来获取进程的进程组ID。然而,需要注意的是,posix函数不适用于Windows系统。

我们可以使用file_exists函数和is_dir函数来检查指定的PID是否正在运行。如果我们希望在操作系统中具有更好的兼容性,则可以使用posix函数来实现相同的功能。

0