提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
学习守护进程的函数使用以及添加开机自启动
一、守护进程是什么?
Daemon(守护进程)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。它不需要用户输入就能运行而且提供某种服务,不是对整个系统就是对某个用户程序提供服务。Linux系统的大多数服务器就是通过守护进程实现的。
二、使用步骤
#include <unistd.h>
#include <signal.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <time.h>
#include <stdio.h>
#include <stdbool.h>
static bool flag=true;
void handler(int sig)
{
printf("I got a signal %d\nI'm qutting.\n",sig);
flag=false;
}
int main()
{
time_t t;
int fd;
struct sigaction act;
//创建守护进程
if(daemon(0,0)==-1){
printf("daemon error\n");
exit(1);
}
//设置信号处理函数
act.sa_handler=handler;
sigemptyset(&act.sa_mask);
act.sa_flags=0;
if(sigaction(SIGQUIT,&act,NULL)){
printf("sigaction error.\n");
exit(0);
}
//进程工作内容
while(flag){
fd=open("/home/orangepi/daemon.log",O_WRONLY|O_CREAT|O_APPEND,0644);
if(fd==-1){
printf("open error\n");
}
t=time(0);
char *buf=asctime(localtime(&t));
write(fd,buf,strlen(buf));
close(fd);
sleep(10);
}
return 0;
}
1.利用守护进程往文件里写入当前文件,并使用SIGQUIT信号控制进程。daemon(0,0)第一个0表示进程工作根目录,第二个0表示将标准输入输出以及错误充定向至/dev/null.。
2.将程序添加开机自启动。sudo vim /etc/rc.local,添加程序所在位置以及程序名称。重启设备,使用 ps -ef |grep daemontime(自己的程序名称),查看进程。