linux中通过信号实现定时操作
比如我们需要后台执行一个定时任务,可以使用以下模板来操作
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <signal.h>
void test()
{
printf("this is a test\n");
}
void func(int a)
{
test();
alarm(5);//5s后重新执行该函数
}
int main()
{
int pid ;
pid = fork();
//fork进程失败
if (pid<0)
{
fprintf(stderr,"failed when fork\n");
return RET_SUCCESS;
}
//父进程直接返回
if (pid !=0)
{
return 1;
}
//子进程
else
{
//将子进程放到后台执行,当前shell断开后,不影响定时任务
setsid();
//给子进程创建文件的最大权限
umask(0);
}
//为SIGALRM信号注册专有的处理函数,不再使用默认的信号处理
signal(SIGALRM, func);
//2s后要执行的函数
alarm(2);//设置定时2s
while (1)//让子进程永不退出
{
slepp(100000);
}
return 0;
}