守护进程是什么?就是在后台运行的进程。
那么如何创建守护进程呢?
1. 创建孤儿进程
2. setsid() 创建进程会话
3. 重定向标准输入, 标准输出
4. chdir, 改当当前进程的工作目录
接下来看一个例子:
#include <stdio.h> #include <fcntl.h> #include <unistd.h> int main(void) { //进程成为守护进程的步骤 //代号:Ss //守护进程也称为精灵进程 //1.产生孤儿进程 pid_t pid ; int fd ; pid = fork(); if(0 == pid) { //2.改变工作目录 chdir("/"); //3.成为进程组长 setsid(); //4 1>.关闭标准输入,输出,出错 //close(0); //close(1); //close(2); //2> 重定向 fd = open("/dev/null" , O_RDWR); if(-1 == fd) { perror("Open null file fail"); return -1 ; } //禁掉标准输入,输出,出错,不然输出的东西会在终端乱喷 //Ctrl + C 无效 dup2(fd , 0); dup2(fd , 1); dup2(fd , 2); while(1) { //main event loop printf("hello world \n"); sleep(1); } return 0 ; } //父进程直接退出 return 0 ; }