守护进程笔记


一、守护进程特点及概念

  1. 运行时间较长
  2. 后台运行,不需要和用户交互

例:数据库的服务端

二、相关概念

1.会话

由用户通过打开终端而标识的会话

2.会话首进程

整个会话中首个执行的进程的id

3.进程组

(方便对进程的管理)

4.组长进程

用于标识进程组

三、守护进程编程

1.流程

  1. 先fork,退出父进程(做组员)
  2. 创建新会话 setsid() (脱离原会话,做新会话的组长进程)
  3. 再fork,退出父进程
  4. chdir("/");(由于运行时间长,为了避免不得已结束,故将守护进程放在)
  5. umask(0); (将掩码清零)
  6. 关闭所有文件描述符
  7. 如果有子进程,就要处理僵死进程

2.代码演示

代码如下(示例):

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
#include<assert.h>
#include<time.h>
#include<sys/stat.h>

int fund()
{
    pid_t pid = fork();
    if(pid != 0)
    {
        exit(0); //终止父进程
    } 
    
    setsid(); //

    pid = fork();
    if(pid != 0)
    {
        exit(0);
    }

    chdir("/");//

    umask(0);//

    int maxfd = getdtablesize();
    int i = 0;
    for(;i < maxfd; i++)
    {
        close(i);
    }


}

int main()
{
    fund();//

    while(1)
    {
        FILE* fp = fopen("/tmp/c210d.log","a");
        if( fp == NULL )
        {
            break;
        }
        
        time_t tv;
        time(&tv); //1970-01-01

        fprintf(fp,"current time:%s",asctime(localtime(&tv)));

        fclose(fp);
        sleep(5);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值