Linux-编写简单守护进程
2024-09-02 00:13:13
1、任何一个进程都可以将自己实现成一个守护进程
2、create_daemon函数要素
(1)、子进程要等待父进程退出
(2)、子进程使用setsid创建新的会话期,脱离控制台
(3)、调用chdir将当前工作目录设置为/
(4)、umask设置为0以取消任何文件权限屏蔽
(5)、关闭所有文件描述符
(6)、将进程0、1、2定位到/dev/null
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
void creat_daemon(void);
int main(void)
{
creat_daemon();
while()
{
printf(" i am running\n");
sleep();
} return ;
} void creat_daemon(void)
{
pid_t pid =; pid = fork();
if(pid < )
{
perror("fork");
exit(-);
}
if(pid > )
{
exit(); //父进程直接退出
}
//能够执行到到这里的就是子进程了 //setsid将当前进程设置为一个新的会话期session,
//目的就是让当前进程脱离控制台
pid = setsid();
if(pid < )
{
perror("setsid");
exit(-);
}
//将当前进程工作目录设置为根目录
chdir("/");
//umask设置为0确保将来进程有最大的文件操作权限
umask();
//关闭所有文件描述符
//先要获取当前系统中所允许打开的最大文件描述符数目
int cnt = sysconf(_SC_OPEN_MAX);
int i = ;
for(i = ; i < cnt; i++)
{
close(i);
}
open("/dev/null", O_RDWR);//打开进程0,将其定位到/dev/null
open("/dev/null", O_RDWR);//打开进程1,将其定位到/dev/null
open("/dev/null", O_RDWR);//打开进程2,将其定位到/dev/null
}
最新文章
- SqlDateTime overflow. Must be between 1/1/1753 12:00:00 AM and 12/31/9999 11:59:59 PM.
- js中Number数字数值运算后值不对
- jQuery(一)delegate() 方法
- Log4j配置全说明
- Binary Numbers(HDU1390)
- oracle11g用户名密码不区分大小写
- NYOJ 300 &;amp;&;amp; hdu 2276 Kiki &;amp; Little Kiki 2 (矩阵高速功率)
- GO interface显示类型转换方法
- 【Egret】Wing3发布移动APP功能,打包APK流程以及会遇到的问题
- SpringCloud的应用发布(一)SpringCloud的样例工程
- mutex,thread
- LARS 最小角回归算法简介
- 【XSY2753】Lcm 分治 FWT FFT 容斥
- HTML 滚动条样式修改
- nginx转发swoole以及nginx负载
- python线程join
- Hadoop本地安装
- 学习《深入理解C#》—— 可空类型、可选参数和默认值 (第一章1.3)
- Java-Runoob:Java 异常处理
- Young Maids