文章目录
- 前言
- 一、守护进程是什么?
- 二、编程流程
- 三、使用步骤
-
- 总结
前言
提示:以下是本篇文章正文内容,下面案例可供参考
一、守护进程是什么?
守护进程是在后台为用户提供服务且不需要与用户进行交互的一种程序。
**会话:**在操作系统中每打开一个中断就伴随着一个会话的产生
会话首进程:在一个会话中执行的第一个进程,在Linux中一般是命令解释器
**会话ID(SID):**该会话首进程的PID就是该会话的ID
进程组:操作系统上每执行一个进程,就会产生一个进程组,该进程为该进程组的组长,该进程的PID为该进程组的ID(获取函数get_pgrp);
二、编程流程
三、使用步骤
1.后台运行,每隔五秒输出一次时间
代码如下(示例):
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<sys/stat.h>
#include<time.h>
void set_demon()
{
pid_t pid=fork();
if(pid!=0)
{
exit(0);
}
setsid();
pid=fork();
if(pid!=0)
{
exit(0);
}
chdir("/");
umask(0);
int size=getdtablesize();
for(int i=0;i<size;i++)
{
close(i);
}
}
int main()
{
set_demon();
while(1)
{
FILE*fp=fopen("/tmp/c215.log","a");
if(NULL==fp)
{
break;
}
time_t tv;
time(&tv);
char*s=asctime( localtime(&tv) );
fprintf(fp,"time is %s",s);
fclose(fp);
sleep(5);
}
return 0;
}
2.输出结果
总结
fork();//退出父进程保留子进程
setsid();//子进程移动得新会话里
fork();//刚才的子进程变成父进程,退出父进程,失去进程组组长身份,保留子进程。
chdir"/"//新的子进程移动到根目录下面
umask(0);//清除掩码
close()//关闭所有文件描述符
处理僵死进程
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)