PHP Conference Japan 2024

posix_getppid

(PHP 4, PHP 5, PHP 7, PHP 8)

posix_getppid返回父进程标识符

描述

posix_getppid(): int

返回当前进程的父进程的进程标识符。

参数

此函数没有参数。

返回值

返回标识符,作为 int

范例

示例 #1 posix_getppid() 的示例用法

<?php
echo posix_getppid(); //8259
?>

添加注释

用户贡献的注释 4 条注释

mail at spacerat dot net
7 年前
回复 https://php.net/manual/en/function.posix-getppid.php#120088

如果您正在使用 proc_open,并且想要获取调用 php 进程的 pid,请使用带有“exec php $scriptname”用法的 proc open。在这种情况下,您可以获取真实的父 ID,因为 php 不会启动新的 shell。
divinity76 at gmail dot com
8 年前
警告:使用 proc_open 时,您的子进程不会通过使用 posix_getppid() 获取父 php 进程的 PID,它实际上会获取由 php 启动的 shell(/bin/sh?)的 pid,而 shell 又启动了子进程。我目前还没有很好的解决方法,但我正在通过让父进程将其 pid 写入文件并让子进程读取文件来解决这个问题。
Avital Yachin
6 年前
posix_getppid 在 Windows 上不起作用。
这是一个替代方案

<?php
if(strncasecmp(PHP_OS, "win", 3) == 0) {
$pid = getmypid(); // 子进程 ID
$parent_pid = shell_exec("wmic process where (processid=$pid) get parentprocessid");
$parent_pid = explode("\n", $parent_pid);
$parent_pid = intval($parent_pid[1]);

echo
"子进程: $pid 父进程: $parent_pid\n";
}
?>
divinity76 at gmail dot com
7 年前
使用 proc_open 时,子进程的 ppid 不是您的 php 脚本,而是 proc_open 的 pid 启动的 shell。要获取您的 pid,您的 proc_open 子进程需要获取父进程的父进程(又名祖父母)的 pid。以下是在 Linux 上使用 PHP 执行此操作的方法

function posix_getpppid(): int {
return ( int ) (explode ( " ", file_get_contents ( "/proc/" . posix_getppid () . "/stat" ) ) [3]);
}

(感谢 irc.freenode.net/##PHP 上的 TML 提供的技术)

(我在之前的评论中提到了大部分内容,但我没有一个好的解决方案。现在我有了一个。如果某个有权限的人读到这个,请删除此通知和我的上一条评论好吗?)
To Top