/*守护进程*/
#include<stdio.h>
#include <sys/types.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <syslog.h>
int main()
{
//创建子进程,父进程退出
pid_t pid = fork();
if(pid < 0)
{
perror("fork error!");
return -1;
}
else if(pid > 0)
{
exit(0);
}
//打开日志服务
openlog("a.out", LOG_PID, LOG_DAEMON);
//子进程
//创建新的会话组
pid_t ret = setsid();
if(ret < 0)
{
//perror("setsid error!");
syslog(LOG_ERR, "%s\n", "setsid error");
exit(-1);
}
//改变工作目录
int ret1 = chdir("/tmp");
if(ret1 < 0)
{
//perror("chdir error!");
syslog(LOG_ERR, "%s\n", "chdir error");
exit(-1);
}
//设置umask为0
umask(0);
//关闭文件描述符
int i;
for(i = 0; i < getdtablesize(); i++)
{
close(i);
}
syslog(LOG_ERR, "%s\n", "write error........");
char buf[] = "hello...........\n";
while(1)
{
int fd = open("test.txt", O_WRONLY | O_CREAT | O_APPEND, 0666);
if(fd < 0)
{
//perror("open error!");
syslog(LOG_ERR, "%s\n", "open error");
exit(-1);
}
ret1 = write(fd, buf, sizeof(buf));
if(ret1 < 0)
{
//perror("write error!");
syslog(LOG_ERR, "%s\n", "write error");
close(fd);
exit(-1);
}
close(fd);
sleep(2);
syslog(LOG_ERR, "%s\n", "error.......");
}
closelog();
return 0;
}
守护进程
最新推荐文章于 2022-12-24 16:47:48 发布