您的位置:首页 > 编程语言 > C语言/C++

C语言编写daemon模式的后台运行程序

2017-11-07 00:00 1996 查看
C语言编写daemon模式的后台运行程序

init_daemon.c

#include <unistd.h>
#include <signal.h>
#include <sys/param.h>
#include <sys/types.h>
#include <sys/stat.h>
void init_daemon(void) {
int pid;
int i;
/* 是父进程,结束父进程 */
if(pid=fork()) {
exit(0);
}else if(pid< 0) {
exit(1);
/* fork失败,退出 */
}
/* 是第一子进程,后台继续执行 */
/* 第一子进程成为新的会话组长和进程组长 */
setsid();
/* 并与控制终端分离  */
if(pid=fork()) {
exit(0);
/* 是第一子进程,结束第一子进程 */
}else if(pid< 0) {
exit(1);
/* fork失败,退出 */
}
/* 是第二子进程,继续 */
/* 第二子进程不再是会话组长 */
/* 关闭打开的文件描述符 */
for(i=0;i< NOFILE;++i) {
close(i);
}
/* 改变工作目录到/tmp */
chdir("/tmp");
/* 重设文件创建掩模 */
umask(0);
return;
}


test1.c

#include <stdio.h>
#include <time.h>
void init_daemon(void);
/* 守护进程初始化函数  */
main()
{
FILE *fp;
time_t t;
init_daemon();
/* 初始化为Daemon  */
while(1)
{
/* 每隔一分钟向test.log报告运行状  */
sleep(60);
/* 睡眠一分钟  */
if((fp=fopen("test.log","a")) >=0) {
t=time(0);
fprintf(fp,"Im here at %s/n",asctime(localtime(&t)) );
fclose(fp);
}
}
}

编译:

gcc -o test1 test1.c init_deamon.c

运行:

# ./test1
# ps -ef |grep test1

就可以看到这个程序以deamon形式在运行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: