5-3 会话

会话 会话是一个进程组,或是多个进程组的集合。 一个会话可以至少有一个控制终端(物理终端,伪终端) 一个会话至少有一个前台进程组(前台就是指能输入的 bin/bash ),其它就是后台进程组 一个会话如果连接了一个控制终端,就叫控制进程 因为这个会话首进程 /bin/bash 是连接控制终端(伪终端设置驱动程序+tcp/ip 对端的ssh client) 的,所以创建的子进程,也会继承 bin/bash 的控制终端(0,1,2标准输出,标准输入,标准错误) 在终端的输入会影响前台进程组,ctrl+c (会终止前台进程)。 会话的创建 使用 posix_setsid() / setsid(2)创建。 不能使用组长进程调用 setsid 函数,硬要调用会报错 一般先创建一个子进程,让父进程exit,由子进程调用 setsid 调用 setsid 之后,该进程会变成组长进程,同时也会变成会话首进程 同时该进程没有控制终端(没有终端了,可以认为它没有连接显示器,没有连接键盘) 它没有控制终端了,你在终端里输入任何数据都没有反应的 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 '会话创建成功'....

2022-06-10 · 王二