进程间关系和守护进程

进程组
进程组是一个或者多个进程的集合。每个进程除了有一个进程ID外,还属于一个进程组。每个进程组由一个唯一的进程组ID。每个进程组都可以有一个组长进程,组长进程的标识是其进程组ID等于其进程ID。组长进程可以创建一个进程组,创建该组中的进程,然后终止。只要在某个进程组组中一个进程存在,则该进程组就存在,与其组长进程是否终止无关。–类比班级、班长实例
作业
Shell分前后台来控制的不是进程而是作业或者进程组。一个前台作业或者后台作业可以由多个进程组成,Shell可以运行一个前台作业和任意多个后台作业,称为作业控制。
作业与进程组的区别:作业创建子进程,则子进程属于进程组而不属于作业。
在前台新起作业,shell是无法运行的,因为它被提到了后台。但是如果前台进程退出,shell又被提到了前台,所以可以继续接受用户输入。
线程→进程→进程组→作业→会话
会话
会话一个或者多个进程组的集合。一个会话可以有一个控制终端(如Xshell)。一个会话中应该包括控制进程(会话首进程),一个前台进程组和任意后台进程组,新打开一个终端。kill话首,会话还在。每打开一个终端,就新建了一个会话。
作业控制
Shell分前后台来控制的不是进程,而是作业或者进程组。一个前台作业可以由多个进程组成,一个后台作业也可以由多个进程组成,Shell可以同时运行一个前台作业和任意多个后台作业,这称为作业控制。
守护进程
守护进程也称为精灵进程,是运行在后台的一种特殊进程。独立于控制终端并且周期性执行某种任务或等待处理某些发生的事件。Linux大多数服务器由守护进程实现的。如:ftp服务器,ssh服务器,Web服务器httpd等。同时完成许多系统任务,如作业规划进程crond(设置定时任务)等。
用途:在后台提供某种服务
守护进程不受用户登录注销的影响,它们会一直在运行着。
基本上守护进程也是孤儿进程,自成进程组,自成会话。
ps axj | more 命令查看系统中的进程:
这里写图片描述
凡是TPGID一栏写着-1的都是没有控制终端的进程,也就是守护进程。
创建守护进程
创建守护进程最关键的一步是调用setsid函数创建一个新的Session,并成为Session Leader。

#include<unistd.h>
pid_t setsid(void);
该函数调用成功时返回新创建的Session的id(其实也就是当前进程的id),出错返回-1

调用这个函数之前,当前进程不允许是进程组的leader,否则函数返回-1。如要保证,则需要先fork再调用setsid就可以了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值