Skip to content

Commit

Permalink
Merge pull request elarity#2 from flymenn/patch-2
Browse files Browse the repository at this point in the history
调整mkdown格式
  • Loading branch information
elarity authored Apr 27, 2018
2 parents dd173e7 + 3027e2f commit 305506f
Showing 1 changed file with 3 additions and 3 deletions.
6 changes: 3 additions & 3 deletions 7. php多进程初探---再次谈daemon进程.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@
##### 三个概念,理(bei)解(song)一下:
- 进程组。一坨相关的进程可以组成一个进程组,每个进程组都会有一个组ID(正整数),每个进程组都会有一个组长进程,组长进程的ID等于进程组ID。组长进程可以创建新的进程组以及该进程组中的其他进程。一个进程组的是有生命周期的,即便是组长进程挂了,只有组里还有其他的活口,那就就算该进程组依然存活,只有到组里最后一个活口也挂了,那真的就是彻底没了。
- 会话。一坨相关的进程组组成了一个会话。在*NIX下,是通过setsid()创建一个新的会话。但是值得注意的是,组长进程不能创建会话,简单理解就是在组长进程中,执行setsid函数会报错,这点很重要。所以一般都是组长进程执行fork,然后主进程退出,因为子进程的进程ID是新分配的,而子进程的进程组ID是继承父进程的,所以子进程就注定不可能是组长进程,从而可以确保子进程中一定可以执行setsid函数。在执行setsid函数时候,一般会发生下面三个比较重要的事情:
- 该进程会创建一个新的进程组,该进程为进程组组长(或者你可以认为这是一种提升)
- 该进程会创建一个会话组并成为该会话的会话首进程(会话首进程就是创建该会话的进程)
- 该进程会失去控制终端。如果该进程本来就没有控制终端,则罢了(liao)。如果有,那么该进程也将脱离该控制终端,与之失去联系。
- 该进程会创建一个新的进程组,该进程为进程组组长(或者你可以认为这是一种提升)
- 该进程会创建一个会话组并成为该会话的会话首进程(会话首进程就是创建该会话的进程)
- 该进程会失去控制终端。如果该进程本来就没有控制终端,则罢了(liao)。如果有,那么该进程也将脱离该控制终端,与之失去联系。
- 控制终端。每个会话可能会拥有一个控制终端(看着比较玄学,你可以暂时理解为就一个那种黑乎乎的命令行窗口),建立与控制终端连接的会话首进程叫做控制进程。

##### 结合Linux命令ps来查看一下上述几个概念的恩怨情仇,我们看下我们常用的 ps -o pid,ppid,pgid,sid,comm | less 执行结果:
Expand Down

0 comments on commit 305506f

Please sign in to comment.