ProcessGroup
? Linux系统一般都是作为服务器而存在,对于Linux系统而言,图形化界面不过是一个内核之外给“普通用户”增加使用体验感的一个道“道具”而已,这个“道具”和Windows系统一样,对于一个小白而言上手即可使用,只不过Windows的图形界面是内核之内的,而Linux系统的图新界面是内核之外的。由于设计的初衷不同,作为服务器的Linux系统,使用图形化界面是没有任何对服务器性能提升的作用的,所以摒弃图形化界面一个Linux使用者所要秉持的原则 所以很多时候对Linux系统的使用常常是通过一个shell终端进行的,再说的直接一点,一个用户通过一个终端或者Telnet,login一个Linux系统往往是通过一个会话session进行的!当用户登入时,这个会话就开始了。这个时候shell所承担的作用就是,用户在pc端键盘输入指令给终端,终端把这个命令交给shell,shell会执行这个命令,执行完之后会把这个结果显示出来。这个过程周而复始,直到用户logout,这个会话就结束了。(可以想象shell就是一个进程) 然而用户在登入一个Linux系统后的目的却不是仅仅执行几行指令这么简单,用户的目的往往会在终端运行一个可执行的大程序,那么这个时候shell进程就会暂时把终端的使用权交个这个可执行程序,这个可执行程序会被一个由shell进程fork的子进程接管(其中就包含fork与exec函数族),这个子进程此时就获得了终端的使用权,从而进行输入输出的显示操作,当子进程结束后,会把使用权返回给shell进程。(注:这个时候,最开始的进程shell会变为后台进程,子进程变为前台进程。当然如果子进程是一个执行时间很长的程序的话,也可以将此进程作为一个后台挂起的进程,然后重新回到shell上来进行别的指令操作)此时这个子进程和shell进程之前其实是一个进程组,二者共同切换的使用这个终端为用户显示输入输出。这时我们可以将这个子进程分离出来,(使用setcid函数)成为一个新的会话session,但是分离出来的子进程没有终端了!就丧失了对终端的输入输出了! ? 注意这里面的关系!!!
#include <unistd.h>
int setpgid(pid_t pid, pid_t pgid);
|