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.dev.org.tw/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
"Child: $pid Parent: $parent_pid\n";
}
?>
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