手机版
你好,游客 登录 注册
背景:
阅读新闻

Linux守护进程

[日期:2015-09-19] 来源:Linux社区  作者:yilipika [字体: ]

Linux守护进程

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<fcntl.h>
#include<sys/types.h>
#include<sys/wait.h>

#define MAXFILE 65535

volatile sig_atomic_t _running = 1;

void sigterm_handler(int arg)
{
    _running = 0;
}

int main()
{
    pid_t pc, pid;
    int i, fd, len, flag = 1;
    char *buf = "this is a Dameon\n";
    len = strlen(buf);
   
    //第一步,创建子进程,结束父进程,让init进程收养
    pc = fork();
    if (pc < 0) {
        printf("error fork\n");
        exit(1);
    } else if (pc > 0) {
        exit(0);
    }
   
    //第二步,创建新会话,setsid(set session id),摆脱原会话的控制,摆脱原进程组的控制,摆脱原控制终端的控制
    pid = setsid();
    if (pid < 0)
        perror("setsid error");
   
    //第三步,更改工作目录
    chdir("/");
   
    //第四步,重设文件权限掩码
    umask(0);
   
    //第五步,关闭文件描述符
    for (i = 0; i < MAXFILE; i++)
        close(i);
   
    signal(SIGTERM, sigterm_handler);
   
    while (_running)
    {
        if (flag ==1 && (fd=open("/tmp/daemon.log", O_CREAT|O_WRONLY|O_APPEND, 0600))<0)
        {
            perror("open");
            flag = 0;
            exit(1);
        }
        write(fd,buf,len);
        close(fd);
        usleep(10*1000); //10毫秒
    }
}

守护进程,后台运行,不受终端影响。

每个从终端运行的进程,都依附于这个终端。这个终端就成为这些进程的控制终端。当控制终端被关闭时,相应的进程都会随之自动关闭。

本文永久更新链接地址http://www.linuxidc.com/Linux/2015-09/123279.htm

linux
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款