关于c:进程之间的关系

3次阅读

共计 1376 个字符,预计需要花费 4 分钟才能阅读完成。

简介:这解说过程之间的关系:父子过程、过程和过程组、会话。这节只须要理解即可。

1:首先、解说一下终端登录。


在晚期的时候、咱们应用终端设备进行登录,然而因为终端设备连贯的无限,因而登录的用户也就是无限的。随着位映射图形终端变得可用,开发出了窗口零碎,它向用户提供了与主机
零碎进行交互的新形式。在这里、我简略介绍一下过来有终端设备登录的流程(只是做为一个理解)。首先是 init 过程读取 /etc/ttys 文件(此文件保留各个终端设备的信息),为每一个终端创立一个空的环境。而后应用 getty 函数以读写的形式关上终端,并将规范输出、输入和谬误
重置到该终端中,最初执行 login 程序进行登录。

2:这里简略介绍一下过程组的概念。


每一个过程都属于一个过程组,每个过程组有相似与过程 ID 的过程组 ID。过程组的存在不便咱们管理控制。在上一节中、咱们介绍回收过程的时候,能够期待指定过程组 ID 中的过程完结。有些时候,咱们可能须要很多个过程单干去实现某一项工作。这时候,咱们能够应用过程组的概念去会后过程组中的过程。上面我简略列举一个例子。多过程服务器:每当一个客户端到来的时候、咱们创立一个新的过程去执行相应的工作。当执行完工作后,子过程就会向父过程发送终止信号,这时候、我峨嵋你不分明是该过程组中的那个过程完结了。因而、咱们能够抉择去回收该过程组中的过程。咱们能够应用如下函数获取和设置过程 ID。int setpgid(pid_t pid, pid_t pgid);
此函数用于将指定过程 ID 设置为 pgid,然而这个函数只能为本人或者对应的子过程设置过程组 ID,同时、如果子过程应用了 exec 函数后就不能设置过程组 ID。如果你想要父子过程同属一个过程组,那么请在 fork 之后应用此函数设置过程组 ID。int getpgid(pid_t pid);
获取指定过程 ID 的过程组 ID。注:只有过程组中有一个过程存在,那么该过程组就存在。(因而、在这里咱们感觉过程组 ID 是这过程创立终止而随时变动的。

3:会话


会话的概念倒是非常简略、他就是几个过程组的汇合。会话是没有会话 ID 的,通常咱们能够取得该过程的首个过程组的过程组ID。通常状况下、咱们能够 fork 一个子过程去调用如下的函数以保障改过程和其余过程没有什么关系(除了、父过程是 init 过程)。pid_t setsid(void);
将调用该函数的过程设置为一个会话。在调用此函数后、改过程会产生如下状况。a)改过程成为一个会话的首过程。b)该过程是一个新的过程组的组长过程。c)如果改过程之前和管制终端有分割的话,那么当初改过程和管制终端将不会有什么分割。pid_t getsid(pid_t pid);
此函数用于获取指定过程所处会话首个过程组的过程组 ID。

4:管制终端。


会话和过程组有一些其余的恶行:a:一个会话能够有一个管制终端。这通常是登录到其余的终端设备或伪终端设备。b:建设与管制终端连贯的过程称为伪终端过程。c:一个会话中能够分为前台过程组和后盾过程组。d:如果一个会话有一个管制终端,则它有一个前台过程组,会话中的其余过程组则为后盾过程组。e:信号会发送给前台过程组。如下两个函数用于告诉内核哪一个是前台过程组。pid_t tcgetpgrp(int filedes);//用于将filedes先关联的终端设备前台过程组的过程组 ID。
正文完
 0