Linux 守护进程及系统日志
pid_t setsid(void);
void openlog(const char *ident, int option, int facility);
void syslog(int priority, const char *format, ...);
void closelog(void);
创建守护进程及系统日志
例程:mydaemon.c
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
#include <fcntl.h>
#include <syslog.h>
#include <errno.h>
#include <string.h>
static int deaminize(void) //创建守护进程
{
int fd;
pid_t pid;
pid = fork(); //创建子进程
if(pid <0)
return -1;
else if(pid >0) //父进程正常退出
exit(0);
fd = open("/tmp/mystdout",O_RDWR); //打开一个文件
if(fd <0)
return -2;
dup2(fd,0); //将标准输如映射到fd
dup2(fd,1); /将标准输出映射到fd
dup2(fd,2); /将标准输错误映射到fd
pid = setsid(); //创建守护进程
if(pid == (pid_t) -1)
return -3;
chdir("/"); //更改进程执行目录
umask(0); //更改umask值禁止创建文件
return 0;
}
int main()
{
FILE *fp;
int i=0,ret;
openlog("mydaemon",LOG_PID,LOG_DAEMON); //设置系统日志
ret = deaminize(); //创建守护进程
if(ret)
{
syslog(LOG_ERR,"ret:%d",ret); //输出系统日志
exit(1);
}
fp = fopen("/tmp/out","w"); //打开文件
if(fp ==NULL)
{
syslog(LOG_ERR,"fopen():%s",strerror(errno)); //输出系统日志
exit(1);
}
while(1)
{
fprintf(fp,"%d\n",i); //向文件中写入数据
i++;
fflush(fp); //刷新数据流
sleep(1);
}
fclose(fp);
closelog();
exit(0);
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现