Я думаю, posix_kill(posix_getpgrp(), 0)
- лучший способ проверить, работает ли PID, он недоступен только на платформах Windows.
Это то же самое, что kill -0 PID
на оболочке и shell_exec('kill -0 PID')
на PHP, но НЕТ ОШИБКИ, если pid не существует.
В разветвленном дочернем процессе posix_getpgid
возвращает pid родителя всегда, даже если родительский процесс был прерван.
<?php
$pid = pcntl_fork();
if ($pid === -1) {
exit(-1);
} elseif ($pid === 0) {
echo "in child\n";
while (true) {
$pid = posix_getpid();
$pgid = posix_getpgid($pid);
echo "pid: $pid\tpgid: $pgid\n";
sleep(5);
}
} else {
$pid = posix_getpid();
echo "parent process pid: $pid\n";
exit("parent process exit.\n");
}