进程详解(Linux版本)
2018-12-05 本文已影响0人
cendechen
linux 下面一个脚本或一个程序,都是以进程的方式来执行
进程组
每个进程除了有一个进程ID之外,还属于一个进程组, 进程组是一个或多个进程的集合,通常她们通一个作业结合起来的,每个进程组有一个唯一的进程组ID
pid_t getpgrp(void) // 返回进程的进程组ID
每个进程有一个组长进程,组长进程的进程组ID 等于其进程ID, 进程组长可以创建一个进程组,创建该组中的进程,然后终止,只要在某个进程组中有一个进程存在,则该进程组就存在。
进程可以调用
int setpgid(pid_t pid, pid_t pgid) // 函数将pid进程的进程id设置为pgid,如果pid 和pgid 相等,则把pid设置为进程组的组长。
一个进程只能为它和它的子进程设置进程组ID,在它的子进程调用了exec后,它就不再更改该子进程的进程组ID
会话
是一个或多个进程组的集合
pid_t setsid(void) // 进程调用setsid 建立一个新的会话
如果调用此函数的进程不是一个进程组的组长,则此函数创建一个新会话,具体发生一下三件事情
- 该进程变成新会话的会话首进程,此时,该进程是新会话中的唯一进程
- 该进程成为一个新进程组的组长进程,新进程组ID是该调用进程的进程ID
- 该进程没有控制终端,如果该进程调用函数前有控制终端,调用这个函数也将切断
注意: 如果调用这个函数的进程已经是组长进程,就函数报错
首进程ID 就是会话ID
控制终端
- 一个会话可以有一个控制终端,这通常是终端设备或伪终端设备
- 建立与控制终端链接的会话首进程被称为控制进程
- 一个会话中的几个进程组可被分成一个前台进程组以及一个或多个后台进程组
守护进行
在后台运行且不与任何控制终端关联的进程
启动方法
- 在系统启动阶段,许多守护进程由系统初始化脚本启动,这些脚本通常位于/etc/目录或者/etc/rc开头的某个目录中,这些脚本启动的守护进程一开始就有超级管理员特权
- 许多网络服务器由inetd超级服务器启动
- cron守护进程按照规则定期执行一些程序,而由它启动执行的程序同样作为守护进程运行,cron自身由第一条启动方法中的某个脚本启动
- at命令用户指定将来某个时刻的程序执行,这些程序的执行时刻到来时,通常由cron守护进程启动执行她们
- 守护进程还可以从用户终端或在前台或者后台启动,