
























会话是一个进程组,或是多个进程组的集合。
因为这个会话首进程 /bin/bash 是连接控制终端(伪终端设置驱动程序+tcp/ip 对端的ssh client) 的,所以创建的子进程,也会继承 bin/bash 的控制终端(0,1,2标准输出,标准输入,标准错误)
在终端的输入会影响前台进程组,ctrl+c (会终止前台进程)。
使用 posix_setsid() / setsid(2)创建。
phpdemo19.php
<?php
function showPid()
{
$pid = posix_getpid();
fprintf(STDOUT, "pid=%d,ppid=%d,pgid=%d,sid=%d\n",$pid,posix_getppid(),posix_getpgid($pid),posix_getsid($pid));
}
showPid();
$pid = pcntl_fork();
if ($pid > 0) {
exit(0);
}
if (-1 == posix_setsid()) {
echo 'error'.PHP_EOL;
$erro_no = pcntl_errno();
echo pcntl_strerror($erro_no).PHP_EOL;
} else {
echo '会话创建成功'.PHP_EOL;
}
showPid();
while (1) {
sleep(2);
}
执行结果,注意观察 pgid,sid 变化
$ php demo19.php
pid=976,ppid=28,pgid=976,sid=28
会话创建成功
pid=977,ppid=976,pgid=977,sid=977
查看进程信息
ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
## 变成了没有控制终端的进程
laradock 977 0.0 0.1 102524 11020 ? Ss 03:04 0:00 php demo19.php

此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。