C语言编写daemon模式的后台运行程序
init_daemon.c
#include
#include
#include
#include
#include
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
#include
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形式在运行。