守护进程-线程

2021-01-17 04:13

阅读:710

标签:ret   mask   mon   type   cti   set   oid   har   stat   

技术图片

 

 技术图片

 

 技术图片

 

 技术图片

 

 

技术图片

 

 技术图片

 

 

#include 
#include 
#include 
#include 
#include 
#include string.h>
#include 
#include 
#include 
#include #define _FILE_NAME_FORMAT_ "%s/log/mydaemon.%ld"

void touchfile(int num){
    char* HomeDir=getenv("HOME");
    char filename[256]={0};
    sprintf(filename,_FILE_NAME_FORMAT_,HomeDir,time(NULL));
    int fd=open(filename,O_RDWR|O_CREAT,0666);

    if(fd0){
        perror("open error!");
        exit(1);
    }
    close(fd);
}

int main()
{

    //创建子进程,父进程退出
    pid_t pid=fork();
    if(pid>0){
        exit(1);
    }
    //当会长
    setsid();
    //设置掩码
    umask(0);
    //切换目录
    chdir(getenv("HOME")); //
    //关闭文件描述符
    //执行核心逻辑
    struct itimerval myit={{60,0},{1,0}};
    setitimer(ITIMER_REAL,&myit,NULL);
    struct sigaction act;
    act.sa_flags=0;
    sigemptyset(&act.sa_mask);
    act.sa_handler=touchfile;
    sigaction(SIGALRM,&act,NULL);
    while(1){
        //每隔一分钟在/home/.../log下创建文件
        sleep(1);
    }
    //推出
    return 0;
}

 

技术图片

 

 

 

技术图片

 

 

 

技术图片

 

 技术图片

 

 技术图片

 

如果不sleep,则进程退出,创建的线程无法执行。

 

可以用pthread_exit()退出一个线程

技术图片

 

 

 技术图片

 

“I will be out”不会执行。exit整个进程都退出了。

 

技术图片

 

 

技术图片

技术图片

 

 技术图片

 

 (5s后打印第二句,阻塞等待)

 

守护进程-线程

标签:ret   mask   mon   type   cti   set   oid   har   stat   

原文地址:https://www.cnblogs.com/FEIIEF/p/12919846.html


评论


亲,登录后才可以留言!