设为首页 加入收藏

TOP

Linux守护进程
2015-11-10 13:45:56 来源: 作者: 【 】 浏览:4
Tags:Linux 守护 进程

Linux守护进程


#include
#include
#include
#include
#include
#include
#include


#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毫秒
? ? }
}


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


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


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇使用Android Studio创建LinerLayo.. 下一篇Linux信号及孤儿进程与僵尸进程

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: