进程间关系和守护进程

进程间关系:进程组、作业、会话

进程组:

一组进程的集合,这组进程拥有相同的进程组id,可以接收来自同一终端的各种信号

创建一个进程组:

用sleep 100|sleep 200| sleep 300来创建三个进程,这三个进程属于一个进程组

这时我们发现他们的PGID都是2439 说明他们都在2439这个进程组

进程组组长退出进程组不会退出,只要进程组中一个进程存在,这个进程组就存在

扩充:ctrl+c  是将一个进程组退出,从前台切到了后台

          "grep -E"显示文件中符合条件的字符 

          “grep -v grep" 在文档中过滤掉包含有grep字符的行

          &代表进程在后台运行

          S 代表休眠  s+ 里的+代表前台进程

作业:

有多个进程组成

作业和进程组的区别:如果一个作业中的某个进程创建了子进程,这个子进程不属于作业

终端作业:前台作业、后台作业

一个终端最多只有一个前台作业,但可以拥有多个后台作业,如果在前台新起作业,那么shell会转入后台无法执行

会话:

是一个或多个进程组的集合

会话被分为:控制进程(会话首进程)、一个前台进程组、多个后台进程组

每起一个终端都会起一个会话

终端(TTY)起来运行的第一个进程是bash,bash就是终端会话的首进程,SID就是首进程的ID

bash 是shell中的一种

一个会话不一定有终端

作业控制:

jobs可以查看这个终端里所有作业

fg +作业好号  可以将作业提到前端

ctrl+z使进程处于停止状态时,它对信号不做处理,此时若传来一个kill信号,它不做反映,但是一旦他被提到前台时(即运行时),会立即被结束掉、

关系总结:

守护进程

是在后台运行不受终端控制的进程(如输入、输出等),一般的网络服务都是以守护进程的方式运行

在父进程中创建一个子进程,让父进程退出,这样子作业就退出了子进程就转入后台运行

独立于一个终端就是要跳出一个会话,调用setsid()创建一个新的会话

存在意义:周期性的处理某种任务或等待处理某些放生的事件

头文件:#include<unistd.h>

pid_t setsid(void)

成功返回新创建的会话id,失败返回-1

注意!!调用这个函数之前,当前进程不允许是进程组的leader,否则该函数返回-1

调用守护进程函数

int daemon(int nochadir,int noclose);

nochadir:如果为0,更改工作路径到根目录,getcwd可以查看当前的工作路径

noclose:如果为0,将重定向标准输入、标准输出、标准错误到/dev/null

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值