守护进程

守护进程:运行在后台周期性的执行某种任务或者等待处理某些发生的事
          父进程是init进程,因为一开始的父进程在fork执行之后就退出了,所以他是被init进程领养的孤儿进程。守护进程没有控制终端。守护进程的名称通常以d(deamon)结尾


进程、进程组、会话、控制终端:
进程组由若干个进程组成。
会话由若干个进程组组成。
默认情况下,新进程继承父进程的进程组ID和会话ID。系统提供一些操作使得进程脱离进程组,脱离会话。


查看进程的层次关系:ps -ejH
#include <sys/types.h>
#include <unistd.h>
pid_t getpid(void); //进程ID
pid_t getppid(void); //父进程ID
pid_t getpgid(pid_t pid);//进程组ID
pid_t getsid(pid_t pid); //会话ID


int setpgid(pid_t pid, pid_t pgid);//设置进程组ID
调用者:当前进程另立门户,不在之前的进程组里:setpgid(getpid(), getpid());
调用进程指定的要进入的进程组必须和当前进程组处于同一个会话中。
调用进程不能使会话首进程。创建一个新的会话调用函数:setsid,调用该函数的进程就是会话首进程。
pid_t setsid(void);
调用进程是当前进程组的组长进程,调用失败
调用成功时,会话ID=进程ID=进程组ID,该进程成为进程组长
   该进程没有控制终端,如果调用setsid之前有控制终端,这种联系断掉。此时的进程组长可以打开新的终端。


僵尸进程:子进程先死,父进程还在运行。子进程成为僵尸进程。占用进程号。
孤儿进程:父进程先死,子进程成为孤儿,被init进程领养。不会造成危害。
子进程退出时向父进程发送SIGCHILD信号。


僵尸进程解决方法:
1. 子进程退出的时候会发送SIGCHILD信号,父进程处理该信号。
2. 使子进程成为孤儿进程。即父进程早结束。


守护进程通常特点:
1. 在后台运行
2. 脱离控制终端,会话和进程组
3. 禁止进程重新打开控制终端
4. 关闭打开的文件描述符
5. 改变当前工作目录
6. 重设文件创建掩膜 TBD
7. 处理SIGCHILD信号


守护进程创建方法:
1. fork setsid等函数自己创建
2. 标准库函数:deamon(0/1是否重定向,0重定向到根目录, 0/1 0是将标准输入,标准输出,标准错误重定向到/dev/null);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值