会话
# 会话
会话就是一个进程组或多个进程组的集合;
一个会话可以至少有一个控制终端、伪终端
一个会话至少有一个前台进程组【前台:指能输入能执行命令的
bin/bash
】,其他的都是后台进程组一个会话如果连接了一个控制终端,就叫控制进程;因为这个会话首进程
bin/bash
是连接控制终端的【伪终端设备驱动程序 + TCP/IP 对端的 SSH Client】,所以创建的子进程也会继承这个父进程的控制终端【0,1,2 标准输入,标准输出,标准错误】;因为连接了终端,所以在终端的输入会影响前台进程组,如:ctrl c
<?php
function showPID()
{
$pid = posix_getpid();
fprintf(STDOUT, "pid=%d, ppid=%d, gpid=%d, sid=%d\n",
$pid, posix_getppid(), posix_getpgid($pid), posix_getsid($pid));
}
$pid = pcntl_fork();
showPID();
while (1) {
sleep(1);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
运行
[root@jb51 process]# php demo19.php
pid=26214, ppid=24901, gpid=26214, sid=24901
pid=26215, ppid=26214, gpid=26214, sid=24901
1
2
3
2
3
这 2 个子进程会集成
bin/bash
父进程的一些属性,比如组 ID,SID,以及文件描述符:0,1,2【控制终端】,bin/bash
你可以叫他一个会话,一个会话首进程,一个控制进程。
cd /proc/26215
file exe
1
2
2
就可以看到是链接的bin/bash
可以使用如下命令来查看进程的情况
ps -exj
1
可以知道该进程的
PID
、PPID
、PGID
、SID
以及这个进程是哪个UID
用什么COMMAND
在什么时间启动的,状态是STAT[S,T,D,R]
,该进程还连接了哪个终端【你可以认为连接了哪个输入单元,可以简单的认为是你的显示器和键盘,但是是由内核的伪终端设备驱动程序虚拟出来的】
24901 26214 26214 24901 pts/2 26214 S+ 0 0:00 php demo19.php XDG_SESSION_ID=163175 HOSTNAME=jb51.net TERM=xterm SHELL=/bin/bash HI
26214 26215 26214 24901 pts/2 26214 S+ 0 0:00 php demo19.php XDG_SESSION_ID=163175 HOSTNAME=jb51.net TERM=xterm SHELL=/bin/bash HI
1
2
2
编辑 (opens new window)
上次更新: 2022/06/01, 23:40:03