码迷,mamicode.com
首页 > 编程语言 > 详细

守护进程-线程

时间:2020-05-19 22:55:35      阅读:90      评论:0      收藏:0      [点我收藏+]

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

技术图片

 

 技术图片

 

 技术图片

 

 技术图片

 

 

技术图片

 

 技术图片

 

 

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
#include <stdlib.h>
#include <signal.h>
#include <sys/time.h>
#include <time.h>
#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(fd<0){
        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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!