Linux-Process

Linux-IO阻塞模型

1. Linux中的进程


2. DaemonProcess

在 Linux 中,依赖终端启动的进程将会绑定终端的生命周期,随着终端的结束而结束;而某些进程需要长期在后台存活、周期性处理任务,就需要将其设置为 守护进程。守护进程脱离控制终端运行,且不会在任何终端上显示其任何信息。

每一个可交互的界面都被称为「终端」,通过终端启动的进程,都将随着终端进程的结束而结束。

创建守护进程时,可以从任意父进程 fork 出一个子进程然后结束其父进程,则子进程将脱离父进程的生命周期成为 孤儿进程(Orphan Process),操作系统会将孤儿进程视为 init 进程的子进程,由于 init 进程与整个操作系统的生命周期绑定,因此守护进程即可绑定 init 进程的生命周期,直至操作系统结束时才结束。

因此创建一个守护进程实际上有以下几种方式:

  • 直接从 init 进程 fork;
  • 从另一个守护进程 fork;
  • 从任意父进程 fork,然后结束该父进程;

守护进程「守护」的并不是其他进程,而是其创建者(实际上也就是操作系统);并且「守护」表示的只不过是与目标共存亡,并没有「保护」的含义。

此外,init 进程也可以「视为」一个守护进程,因为其生命周期一定与操作系统绑定,区别在于一个守护进程可以被主动结束或重启,但 Kill init 将会结束整个操作系统。


参考文献