进程组是什么
进程组是一个或多个进程组成的,进程组一般有一个组id,进程组的组id是该组第一个进程的id。
即使我们杀了第一个进程,该进程组的组id也是第一个进程的id。
只有进程组中所有进程退出,该进程组才会退出。
会话解析
会话:一个会话可能有一个或多个进程组组成,常见的会话如我们新打开的终端,其本质就是打开一个终端文件,同时运行bash进程。
一个会话都会有一个会话id及sid,sid一般都是该会话的第一个进程组的组id,比如打开一个新终端,我们打开的第一个进程组就是bash。
守护进程详解
守护进程:我们在当前会话中启动一个可执行程序,该可执行程序的执行与会话有关,我们将执行程序变为新的会话,由OS接管。
创建一个守护进程。
1).首先,fork一个子进程,同时将该子进程的父进程杀掉,让其变为孤儿进程。
2).其次,在子进程中(该进程的进程组组长不能设置为新会话),调用接口setsid。
3).最后,我们可以改变进程的当前文件,也可以将我们可以将该进程的stdin, stdout, stderr,都指向/dev/null设备。
同时,我们也可以直接调用系统调用daemon接口。
作业解析
为了解决某些问题,我们通常要启动一个或多个进程,这一个或多个进程被称为作业。
一个会话中,只允许执行一个前台作业和多个后台作业,只有前台作业才能从标准输入中得到信息。
我们可以用一些指令查看当前会话的后台作业。
jobs [-l] [-p]
-p选项,可以查看该作业的pgid。
一个作业后面的+,则代表该默认作业,还可能是-,则代表即将称为默认作业。
fg 作业号
将一个后台作业放到前台。
bg 作业号
将一个暂停(ctrl + z)的进程变为运行状态。
我们可以让一个进程默认在后台运行。
&