进程间关系
除了我们所知道的父子关系,兄弟关系等,进程之间还有两个很重要的关系,即进程组关系和会话关系。
- 进程组作业和会话
例如:
[Daisy@localhost Linux3]$ sleep 1000 | sleep 20000 | sleep 3000 &
[1] 3042
我们进行了3个进程,&表示放在后台运行,运行的结果是[1] 3042其中1表示作业号,3042是最后一个进程的id,例如:
可以看出这三个进程共用一个PPID2831,PGID表示所属组的id,SID是会话id
然后我们多进行几次这三个进程的运行,可以得到:
可以看出是一组一组的,说明进程组是与作业(多个进程协同做一件事称为作业)相联系的
使用jobs命令可以查看当前有几个作业在运行:
[Daisy@localhost Linux3]$ jobs
[1] 运行中 sleep 1000 | sleep 20000 | sleep 3000 &
[2] 运行中 sleep 1000 | sleep 20000 | sleep 3000 &
[3]- 运行中 sleep 1000 | sleep 20000 | sleep 3000 &
[4]+ 运行中 sleep 1000 | sleep 20000 | sleep 3000 &
如果此时想要将某个作业放到前台来运行,使用fg(front ground)命令:
此时将2号作业放到前台来运行,此时将2号作业结束,然后jobs可以发现已经没有了2号作业,如图:
可以看出ctrl+c是终止作业的。
此时如果我们将3号作业和4号作业都终止掉,只剩下1号作业,然后此时我们将1号作业放到前台,但是又想返回后台,此时可以使用ctrl+z命令,然后发现现在作业停止,然后使用bg(back ground)命令将1号作业放到后台,例如:
可以看出实现了这个功能。
因此我们可以得出,当启动一个前台作业时,我们输入命令是没有用的,因为此时bash已经被放到了后台,终止掉这个作业就可以输入命令,因为此时bash放到了前台,例如:
守护进程
也称精灵进程,是放在后台的一种特殊进程。
linux后台的一些系统服务进程,没有控制终端,不能直接和用户交互,不受用户登录和注册的影响,一直在运行着,都是守护进程