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 笔记

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

如果您使用的是 proc_open,并且想要获取调用 php 进程的 pid,请使用 proc open,用法为 "exec php $scriptname"。在这种情况下,您可以获取真正的父 id,因为 php 不会启动一个新的 shell。
3
divinity76 at gmail dot com
7 年前
警告,使用 proc_open 时,您的子进程不会通过使用 posix_getppid() 获取父 php 进程的 PID,它实际上会获取由 php 启动的 shell(/bin/sh?)的 pid,然后由 shell 启动子进程。目前我还没有一个好的解决方法,但我正在通过让父进程将它的 pid 写入文件,并让子进程读取文件来解决这个问题。
2
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";
}
?>
1
divinity76 at gmail dot com
7 年前
使用 proc_open 时,子进程的 ppid 不是您的 php 脚本,而是 proc_open 启动的 shell 的 pid。要获取您的 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