进程组和会话

来源:互联网 发布:windows下tensorflow 编辑:程序博客网 时间:2024/05/16 01:17

3.7.2 进程组和会话

系统中的每个进程都对应一个进程组(processgroup)。进程组中的进程有时被称做任务(job),进而作为进程操作的一个实体,如shell。有些信号(如SIGINT)会发送给进程组中的所有成员,从而导致整个进程组被挂起、恢复执行、中断或者终止。

会话(session)的概念是在IEEE POSIX.1003.1 WorkingGroup中为了解决UNIX中一个长久存在的安全性问题—即进程可以修改其他用户的进程信任的终端的状态—而引入的。会话是进程组的集合,而一个进程组中的所有成员都是该会话的成员。在4.4BSD中,当一个用户初次登录系统,他进入一个新的会话。每个会话都有一个控制进程,而它通常是用户的登录shell。用户创建的所有后续进程都是该会话中进程组的一部分,除非用户显式地创建一个新的会话。每个会话都有一个登录名与之相关联,该登录名一般是用户的登录名,它只能被超级用户修改。

每个会话还关联一个终端,叫做控制终端(controllingterminal)。每个控制终端都和一个进程组相关联。一般地,只有终端的当前进程组中的进程才能对终端进行读或写的操作,并有将终端分配给某个任务的权力。当控制进程退出时,会话中其余的进程也就失去了对终端的访问权。

新建的进程都会被分配给一个与已存在进程及进程组不同的进程ID号,并放置于与其父进程相同的进程组和会话中。任何进程都可以将自己所属的进程组设置为该ID(这样就创建了一个新的进程组),或者设置为该会话中已存在的进程组编号。此外,任何进程只要不是一个进程组的领头进程(或是叫组长进程,一般进程组的第一个进程是领头进程),它就都可以创建新的会话。会话、进程组以及相关内容将在4.8节和10.5节深入讨论。

http://book.51cto.com/art/201202/315888.htm