[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)

nochdir0 改为根目录,noclose0 关闭所有文件描述符

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; 
}

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

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/12512.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论