加入收藏 | 设为首页 |

飞刀又见飞刀-Linux进程联系

海外新闻 时间: 浏览:266 次

Linux的进程相互之间有必定的联系。比方说,在Linux进程根底中,每个进程都有父进程,而一切的进程以init进程为根,构成一个树状结构。咱们在这里解说进程组和会话,以便以愈加丰厚的方法了办理进程。

进程组 (process group)

每个进程都会归于一个进程组(process group),每个进程组中能够包括多个进程。进程组会有一个进程组领导进程 (process group leader),领导进程的PID (PID见Linux进程根底)成为进程飞刀又见飞刀-Linux进程联系组的ID (process group ID, PGID),以辨认进程组。

$ps -o pid,pgid,ppid,comm | cat
PID PGID PPID COMMAND
17763 17763 17751 bash
18534 18534 17763 ps
18535 18534 17763 cat

PID为进程本身的ID,PGID为进程地点的进程组的ID, PPID为进程的父进程ID。从上面的成果,咱们能够推测出如下联系:

图中箭头表明父进程经过fork和exec机制发生子进程。ps和cat都是bash的子进程。进程组的领导进程的PID成为进程组ID。领导进程能够先完结。此刻进程组仍然存在,并持有相同的PGID,直到进程组中最终一个进程完结。

咱们将一些进程归为进程组的一个重要原因是咱们能够将信号发送给一个进程组。进程组中的一切进程都会收到该信号。

会话 (session)

更进一步,在shell支撑作业操控(job control)的前提下,多个进程组还能够构成一个会话 (session)。bash(Bourne-Again shell)支撑作业操控,而sh(Bourne shell)并不支撑。

会话是由其间的进程树立的,该进程叫做会话的领导进程(session leader)。会话领导进程的飞刀又见飞刀-Linux进程联系PID成为辨认会话的SID(session ID)。会话中的每个进程组称为一个作业(job)。会话能够有一个进程组成为会话的前台作业(foreground),而其他的进程组是后台作业(background)。每个会话能够衔接一个操控终端(control terminal)。当操控终端有输入输出时,都传递给该会话的前台进程组。由终端发生的信号,比方CTRL+Z, CTRL+\,会传递到前台进程组。

会话的含义在于将多个作业包括在一个终端,并取其间的一个作业作为前台,来直接接纳该终端的输入输出以及终端信号。 其他作业在后台运转。

一个指令能够经过在结尾加上&方法让它在后台运转:

$ping localhost > log &

此刻终端显现:

[1] 10141

括号中的1表明作业号,而10141为PGID

咱们经过如下方法查询愈加具体的信息:

$ps -o pid,pgid,ppid,sid,tty,comm

(tty表明操控终端)

信号能够经过kill

$kill -SIGTERM -10141

或许

$kill -SI飞刀又见飞刀-Linux进程联系GTERM %1

的方法来发送给作业组。上面的两个指令,一个是发送给PGID(经过在PGID前面加-来表明是一个PGID而不是PID),一个是发送给作业1(%1),两者等价。

一个作业能够经过$fg从后台作业变为前台作业:

$cat > log &

$fg %1

当咱们运转第一个指令后,因为作业在后台,咱们无法对指令进行输入,直到咱们将作业带入前台,才干向cat指令输入。在输入完成后,按下CTRL+D来告诉shell输入完毕。

进程组(作业)的概念较为简略易懂。而会话主要是针对一个终端树立的。当咱们翻开多个终端窗口时,实际上就创建了多个终端会话。每个会话都会有自己的前台作业和后台作业。这样,咱国画牡丹们就为进程增加了办理和运转的层次。在没有图形化界面的年代,会话答使用户经过shell进行多层次的进程建议和办理。比方说,我能够经过shell建议多个后台作业,而此刻规范输入输出并不被占有,我仍然能够持续其它的作业。现在,图形化界面能够协助咱们处理这一需求,但作业组和会话机制仍然在Linux的许多地方使用。

作者:Vamei 出处:http://www.cnblogs.com/vamei

欢迎增加个人微信号:Like若所思。

欢迎重视我的大众号,不仅为你引荐最新的博文,还有更多惊喜和资源在等着你!一同学习共同进步!