进程组、会话、控制终端

进程组

进程组是一个或多个进程的集合,每个进程都属于一个进程组,进程组有唯一组ID。同一进程组中的各进程接收来自同一终端的各种信号。

<unistd.h>
pid_t getpgrp(void);//返回调用进程的进程组ID

每个进程组有一个组长进程,进程组ID即为组长进程ID。进程组组长可以创建一个进程组、创建组中的进程,然后终止。只要进程组有一个进程,进程组就存在。

//加入另一个进程组或创建一个新进程组
<unistd.h>
int setpgid(pid_t pid,pid_t pgid);//成功返回0,失败返回-1
//将pid进程的进程组设置为pgid
//pid=0表示使用调用者的进程ID
//pgid为0表示指定的进程ID作为进程组ID

一个进程只能设置自己和子进程的进程组ID。

 

会话

会话是一个或多个进程组的集合。一个会话开始于用户登录,终止于用户退出,在此期间,该用户运行的所有进程都属于这个会话周期。

//创建一个新的会话
<unistd.h>
pid_t setsid(void);//成功返回进程组ID,失败返回-1
//该进程称为新会话的会话首进程(创建该会话的进程),会话ID即为首进程的ID
//该进程成为一个新进程组的组长进程
//切断与控制终端的联系
//如果该进程已经是一个进程组的组长,则函数出错。
<unistd.h>
pid_t getsid(pid_t pid)//返回调用者会话首进程的进程组ID,即首进程ID,失败返回-1
//pid一般为0,表示调用进程的ID

 

控制终端

如果一个会话有一个控制终端,则它有一个前台进程组,其它进程组为后台进程组。建立与控制终端连接的会话首进程被称为控制进程。控制终端的输入和终端产生的信号会发给前台进程组。

进程组、会话、控制终端

上一篇:jQuery创建元素和添加子元素


下一篇:去除Ubuntu文件夹有锁标志的方法(包含目录下所有文件解锁)