posix_getppid
(PHP 4, PHP 5)
posix_getppid — Return the parent process identifier
Описание
int posix_getppid
( void
)
Return the process identifier of the parent process of the current process.
Возвращаемые значения
Returns the identifier, as an integer.
Примеры
Пример #1 Example use of posix_getppid()
<?php
echo posix_getppid(); //8259
?>
- PHP Руководство
- Функции по категориям
- Индекс функций
- Справочник функций
- Расширения для управления процессами программ
- POSIX
- posix_access
- posix_ctermid
- posix_errno
- posix_get_last_error
- posix_getcwd
- posix_getegid
- posix_geteuid
- posix_getgid
- posix_getgrgid
- posix_getgrnam
- posix_getgroups
- posix_getlogin
- posix_getpgid
- posix_getpgrp
- posix_getpid
- posix_getppid
- posix_getpwnam
- posix_getpwuid
- posix_getrlimit
- posix_getsid
- posix_getuid
- posix_initgroups
- posix_isatty
- posix_kill
- posix_mkfifo
- posix_mknod
- posix_setegid
- posix_seteuid
- posix_setgid
- posix_setpgid
- posix_setrlimit
- posix_setsid
- posix_setuid
- posix_strerror
- posix_times
- posix_ttyname
- posix_uname
Коментарии
WARNING, when using proc_open, your child will NOT get the parent php process's PID by using posix_getppid() , it will actually get the pid of a shell ( /bin/sh ? ) started by php, which in turn starts the child. i don't currently have a good workaround for this, but i'm working around it by having the parent write it's pid to a file and having the chidren read the file
when using proc_open, the child's ppid is NOT your php script, but rather a shell started by proc_open's pid. to get your pid, your proc_open child needs to get the parent's parent's (aka grandparent's) pid. here's a way to do that in PHP on linux:
function posix_getpppid(): int {
return ( int ) (explode ( " ", file_get_contents ( "/proc/" . posix_getppid () . "/stat" ) ) [3]);
}
(thanks to TML @ irc.freenode.net/##PHP for the technique)
(i said most of this in a previous comment, but i didn't have a good solution for it. now i have. if someone with the privileges read this, can you delete this notice and my previous comment please?)
answering to function.posix-getppid#120088
if you're using proc_open and you want to get the pid of the calling php-process, use proc open with usage "exec php $scriptname". In that case, you can get the real parent-id, because php doesn't start a new shell.
posix_getppid will not work on Windows.
Here's an alternative:
<?php
if(strncasecmp(PHP_OS, "win", 3) == 0) {
$pid = getmypid(); // child process 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";
}
?>