基本概念
终端和网络登录过程
进程组
会话
控制终端
Shell 中的命令执行
作业控制

图 5-8 终端上的登录过程
===============================================================================
#include <unistd.h>
int setpgid (pid_t pid, pid_t pgid);
pid_t getpgid (pid_t pid);
int setpgrp (void);
pid_t getpgrp (void);
-------------------------------------------------------------------------------
* 进程只能将自身和其子进程设置为进程组 id.
* 某个子进程调用 exec 函数之后, 就不能再将该子进程的 id 作为进程组 id.
===============================================================================
===============================================================================
#include <unistd.h>
pid_t setsid(void);
-------------------------------------------------------------------------------
* 如果调用进程不是进程组的领头进程, 该函数才能建立新的会话.
* 调用 setsid 之后, 进程成为新会话的领头进程.
* 进程成为新进程组的领头进程.
* 进程失去控制终端
===============================================================================

图 5-9 进程关系
![]()