[linux] C语言Linux系统编程-做成守护进程

医护进程:

务必是init进程的子进程,运行在后台,不跟另外决定终端交互关联。

经以下步骤成为守护进程

1.调因此fork()创建出来一个初的长河,这个新过程会是未来之医护进程

2.以初守护进程的父进程中,调用exit(),为了守护进程的爹爹进程确认父进程结束

3.在初守护进程被,调用setsid(),使得该过程产生一个新的进程组和初的对话,保证了该过程不跟操纵终端交互关联

4.就此chdir()将当前工作目录改呢根本目录,因为前面fork出来的初进程,当前工作目录可能在文件系统的旁地方

5.闭馆所有文件讲述吻合

6.开辟 0 1 2哀号文件讲述称(标准输入,标准输出,标准错误),把它重定向到/dev/null

 

 

#include <sys/types.h>
#include <sys/stat.h>
#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <linux/fs.h>
int main(){
        int ret;
        //创建新进程
        ret=fork();
        //创建失败的直接返回
        if(ret<0){
                return -1;
        }
        //父进程直接结束
        if(ret>0){
                exit(EXIT_SUCCESS);
        }
        //创建新的进程组和会话
        ret=setsid();
        //失败的直接返回
        if(ret<0){
                return -1;
        }
        //改变当前工作目录
        chdir("/");
        //关闭所有文件描述符
        //标准输入输出重定向到/dev/null
        //NR_FILE 是系统在某一给定时刻,限制的文件总数
        for(int i=0;i<NR_FILE;i++){
                close(i);
        }
        open("/dev/null",O_RDWR);
        dup(0);
        dup(0);

        //下面可以写自己的操作...
        while(1){
                sleep(1);
        }
        return 0;
}

 

 

由带函数:daemon();

原型 int daemon(int nochdir,int
noclose)

nochdir也0 改吗彻底目录,noclose为0
关闭所有文件讲述吻合

daemon(0,0)

#include <sys/types.h>
#include <sys/stat.h>
#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <linux/fs.h>
int main(){
        daemon(0,0);
        //下面可以写自己的操作...
        while(1){
                sleep(1);
        }   
        return 0;
}

图片 1