linux守护进程

  1. 先了解 linux系统中 会话的概念
    会话是进程组的更高一级,多个进程组对应一个会话。
    会话是一个或多个进程组的集合
    创建一个会话需要注意以下5点事项:
    a. 调用进程不能是进程组组长, 该进程变成新会话首进程(session header)
    b. 该进程成为一个新进程组的组长进程。
    c. 新会话丢弃原有的控制终端,该会话没有控制终端
    d. 该调用进程是组长进程, 则出错返回
    e. 建立新会话,先调用fork,父进程终止,子进程调用setsid

  2. 守护进程
    Daemon(精灵)进程,是Linux后台服务进程。独立于控制终端,一般采用以d结尾的名字
    创建守护进程,最关键的一步是调用setid函数创建一个新的session,并成为Session Leaders。
    在这里插入图片描述
    在这里插入图片描述

创建守护进程步骤:
在这里插入图片描述

代码案例:
创建一个守护进程,每隔一定时间,创建一个文件

#include <stdio.h>
#include <fcntl.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <stdlib.h>
#include <time.h>
#include <signal.h>
#include <sys/time.h>

#define _FILE_NAME_FORMAT "%s/temp1/mydaemon.%ld"
void catch(int sigNum) {
    char *homePath = getenv("HOME");
    char strFileName[128] = {'\0'};
    sprintf(strFileName, _FILE_NAME_FORMAT, homePath, time(NULL));
    int fd = open(strFileName, O_RDWR|O_CREAT, 0666);
    printf("filename is %s\n", strFileName);
    if(fd < 0) {
        perror("open file error\n");
    }
    close(fd);
}

int main() {
    pid_t pid = fork();
    if(pid > 0) {
        exit(0);
    }
    printf("pid is %d\n", getpid());
    pid_t spid = setsid();
    umask(0);
    chdir(getenv("HOME"));
    printf("spid is %d\n", spid);
    struct  sigaction myact;
    myact.sa_flags = 0;
    sigemptyset(&myact.sa_mask);
    myact.sa_handler = catch;
    sigaction(SIGALRM, &myact, NULL);
    struct itimerval itv = {
        {5,0},
        {3,0}
    };
    setitimer(ITIMER_REAL, &itv, NULL);

    while (1) {
        sleep(1);
    }
    
    return 0;
}

ps:关于 umask的使用, 设置为 0, 而创建文件的守护,用的是 0666,
那么对应的 就是0666 - 0000,权限为 rw-rw-rw-,
如果umask,设置为2, 对应的就是 0666 - 0002,权限为rw-rw-r–

使用 nohup 命令,可以简单的创建后台进程

nohup ./a.out &

&表示后台运行, 这个命令能屏蔽SIGHUP命令
‘>>’ 可以将输出重定向

nohup命令 ,
本信号在用户终端连接(正常或非正常)结束时发出, 通常是在终端的控制进程结束时, 通知同一session内的各个作业

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值