7. 守护进程、进程组等概念
7.1 守护进程特点
- 运行方式
守护进程,也就是通常所说的Daemon进程,是Linux中的后台服务进程。周期性的执行某种任务或等待处理某些发生的事件。Linux系统有很多守护进程,大多数服务都是用守护进程实现的。比如:像我们的tftp,samba,nfs等相关服务。同时Linux的大多数服务器就是用守护进程实现的。比如,Internet服务器inetd,Web服务器httpd等。 - 生命周期
守护进程会长时间运行,常常在系统启动时就开始运行,直到系统关闭时才终止 - 守护进程不依赖于终端
显而异见,从终端开始运行的进程都会依附于这个终端,这个终端称为这些进程的控制终端。当控制终端被关闭时,相应的进程都会被自动关闭。咱们平常写进程时,一个死循环程序关闭终端的同时也关闭了我们的程序,但是对于守护进程来说,其生命周期守护需要突破这种限制,它从开始运行,直到整个系统关闭才会退出,所以守护进程不能依赖于终端。 - 守护进程的父进程为init 进程
7.2 查看守护进程
7.2.1 查看
命令:ps -ajx
- -a: 显示所有
- -x:显示没有控制终端的进程
- -j:显示与作业有关的信息(显示的列):会话期ID(SID),进程组ID(PGID),控制终端(TTY),终端进程组ID(TRGID)
7.2.2 识别守护进程
输入ps -ajx 命令后
- 所有的守护进程都是以超级用户启动的(UID为0);
- 没有控制终端(TTY为?);
- 终端进程组ID为-1(TPGID表示终端进程组ID,该值表示与控制终端相关的前台进程组,如果未和任何终端相关,其值为-1;
- 所有的守护进程的父进程都为init进程(PID为1的进程)。
例如:cron 进程就是一个守护进程
7.3 与进程相关的一些概念
7.3. 1 进程组
进程组是一个或多个进程的集合。进程组由进程组ID(PGID)来唯一标识。每个进程组都有一个组长进程,进程组ID就是组长进程的进程号。
7.3.2 会话
是一个或多个进程组的集合。
一般一个用户登录后新建一个会话(打开终端),每个会话也有一个ID来标识(SID)。登录后的第一个进程叫做会话领头进程(session leader),通常是一个shell/bash,即一个shell程序。对于会话领头进程,其PID=SID。
为什么是一个用户登录后新建一个会话呢?
一般取去公司上班,我们见不到服务器真机,而是公司为每个员工分配一个 用户名和密码,我们可以通过远程进行登录。这个时候我们就登录到了一个终端,因此说一个用户登录后新建一个会话。
7.3.3 控制终端
- 一个会话一般会拥有一个控制终端用于执行IO操作。
- 会话的领头进程(一般是shell进程)打开一个终端之后, 该终端就成为该会话的控制终端。
- 与控制终端建立连接的会话领头进程也称为控制进程 (controlling process) 。一个会话只能有一个控制终端。
7.3.4 前台进程组
- 该进程组中的进程能够向终端设备进行读、写操作的进程组。
例如:在终端中执行./a.out 这个程序就能通过向终端读写
7.3.5 后台进程组ID
- 该进程组中的进程只能够向终端设备写。
例如$ ./a.out &
那么这个进程只能向终端打印内容,但是不能读取终端中的内容。
注意:每个会话有且只有一个前台进程组,但会有0个或者多个后台进程组。
7.3.6 终端进程组ID
每个进程还有一个属性,终端进程组ID(TPGID),用来标识一个进程是否处于一个和终端相关的进程组中。
-
前台进程组中的进程的TPGID=PGID,
-
后台进程组的PGID≠TPGID(d一般前台进程组ID等于终端ID,而