步骤1:
同上
步骤2:建立目录
cd workdir/linux/application/9-process
mkdir dameon
cd dameon
步骤:3:复制
cp /mnt/hgfs/share/2.Linux系统部分/11.Linux系统守护进程实验/实验代码/init.c ./ -a
cp /mnt/hgfs/share/2.Linux系统部分/11.Linux系统守护进程实验/实验代码/test.c ./ -a

步骤4:执行
gcc test.c init.c -o test
./test
ps -ef 查看进程

cat /tmp/test.log 查看程序输出内容

附:程序源码
init.c
1 #include <unistd.h> 2 #include <sys/types.h> 3 #include <sys/stat.h> 4 #include <stdlib.h> 5 void init_daemon(void) 6 { 7 int pid; 8 int i; 9 10 if (pid = fork()) 11 { 12 exit(0); 13 } //是父进程,结束父进程 14 15 else if (pid < 0) 16 { 17 exit( -1 ); 18 } //fork失败,退出 19 20 setsid(); //第一子进程成为新的会话组长和进程组长 并与控制终端分离 21 22 if (pid = fork()) 23 { 24 exit(0); 25 } //是第一子进程,结束第一子进程 26 else if (pid < 0) 27 { 28 exit(1); 29 } //fork失败,退出 30 31 //第二子进程不再是会话组长 32 for(i=0; i< getdtablesize(); ++i) 33 //关闭打开的文件描述符 34 close(i); 35 chdir("/tmp"); //改变工作目录到 /tmp 36 umask(0); //重设文件创建掩模 37 return; 38 }
test.c
1 #include <stdio.h> 2 #include <time.h> 3 void init_daemon(void); //守护进程初始化函数 4 5 int main() 6 { 7 FILE *fp; 8 time_t t; 9 init_daemon(); //初始化为Daemon 10 11 while(1) //每隔2秒钟向test.log报告运行状态 12 { 13 sleep(2); //睡眠2秒钟 14 if((fp = fopen("test.log","a")) != NULL) 15 { 16 t=time(0); 17 fprintf(fp,"I'm here at %sn",asctime(localtime(&t)) ); 18 fclose(fp); 19 } 20 } 21 return 0; 22 }
浙公网安备 33010602011771号