5-2 进程组
进程组,就是一个或是多个进程的集合,每一个进程都有个标识「组ID(PGID)」,表示该进程属于哪个进程组。 bash 进程启动之后,它会自己 setsid 把自己设置为会话首进程,也会设置自己为组长进程。 进程:正在执行的程序,这个程序是在 bin/bash 进程里启动的。 进程启动之后(通过 execve 函数启动),它会继承一些属性比如说组ID,会话ID,同时也会继承父进程已经打开的文件描述符(伪终端里的):0/标准输入,1/标准输出,2/标准错误,通过 pts、ptmx 模拟出来的。 demo17.php $pid = posix_getpid(); fprintf(STDOUT, "pid=%d,ppid=%d,pgid=%d,sid=%d\n",$pid,posix_getppid(),posix_getpgid($pid),posix_getsid($pid)); 查看当前 bash 进程 PID $ echo $$ 1031235 另外一个 SSH 连接,追踪上一个 bash 进程 $ strace -f -s 65500 -o demo17.log -p 1031235 在 bash 进程 1031235 中,执行代码 $ php demo17.php pid=1032568,ppid=1031235,pgid=1032568,sid=1031235 demo17.log # bash 进程 clone 一个子进程 1032568 1031235 clone(child_stack=NULL, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f2c4847ba10) = 1032568 1032568 getpid() = 1032568 ... # 子进程将自己设置为组长进程 1031235 setpgid(1032568, 1032568) = 0 ....