|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
守护进程概述
3 Z* k2 Z& u1 @
+ E! @ A: \1 e5 V7 s 守护进程,又叫daemon进程(不知怎的,我突然想起来吸血鬼日记中的达蒙了,很好看的美剧),是Linux中的后台服务进程。他是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或者等待处理某些发生的事件。守护进程常常在系统引导载入时启动,在系统关闭时终止。Linux有很多系统哦服务,大多数服务都是通过守护进程实现的。同时,守护进程还能完成许多系统任务,例如,作业规划进程cronf、打印进程lqd等(这里的结尾字母 d 就是 daemon的意思)。
$ d9 f K, y4 o y t' ]) t, i; n- A r6 T7 U6 w* L& H+ J2 [# V
在Linux中,每一个系统与用户进行交流的界面称为终端,每一个从此终端开始运行的进程都会依附于这个终端,这个终端称为这些进程的控制终端,当控制终端关闭时,相应的进程都会自动关闭。但是守护进程却能够突破这种限制,它从被执行开始运转,直到接收到某种信号或者整个系统关闭时才退出。如果想让某个进程不因为用户、终端或者其它的变化而受到影响,那么就必须把这个进程变成一个守护进程。可见,守护进程是非常重要的。' |! l( o1 s8 B' r8 r4 Q) a; Z3 C* {! I
' ` r* p: W) ^ a: O6 B- e" x: W
编写守护进程步骤* C* ?! H% q; v9 [9 o
/ ]; _+ o+ E" {5 X; a 编写守护进程遵循一个特定的流程,下面就说一下守护进程的创建步骤。. ]6 V; x* v( `# ]0 z7 K- |* L6 t1 O
Y1 Y$ O: d7 _, Q* M6 |$ l1、创建子进程,父进程退出。# w/ b' p @; f! L
0 p, K+ d: ~9 \ l! @$ _ 这是编写守护进程的第一步。由于守护进程是脱离控制终端的,因此,完成第一步后就会在shell终端造成一种程序已经运行完毕的假象,之后的所有工作都在子进程中完成,而用户在shell终端则可以执行其他的命令,从而在形式上做到与控制终端的脱离。
8 q1 K& i9 [, \* d; u: i( Z, G& F9 w4 ^4 r+ S5 W; _
但是,父进程创建了子进程后退出,此时该子进程不就没有父进程了吗?守护进程中确实会出现这么一个有趣的现象:由于父进程已经先于子进程退出,就会造成子进程没有父进程,从而变成一个孤儿进程。在Linux中,每当系统发现一个孤儿进程时,就会自动由1号进程(也就是 init 进程)收养它,这样原先的子进程就会变成 init 进程的子进程。其关键代码如下;, k* Z5 B1 m( p
3 z0 B4 s; L9 y8 {6 n: `3 d
! @( w; a& G* z$ V z: H, z7 t9 j, p* q- q) ~
3 Y+ W9 L1 q% {9 P
|
|