linux 程序实现后台运行

先上代码: getopt函数获取参数  -d 控制台控制运行  -D 后天运行  -h 调用show_help函数。 

编译命令 

gcc -g -W test.c -o test 

注意后台运行 ./test -D  工作目录被切换到了 目录 / 

 1 #include <stdio.h>
 2 #include <sys/socket.h>
 3 #include <sys/types.h>
 4 #include <netinet/in.h>
 5 #include <arpa/inet.h>
 6 #include <unistd.h>
 7 #include <ctype.h>
 8 #include <strings.h>
 9 #include <string.h>
10 #include <sys/stat.h>
11 #include <pthread.h>
12 #include <sys/wait.h>
13 #include <stdlib.h>
14 #include <stdint.h>
15 
16 // gcc -g -W test.c -o test
17 
18 void daemonize(void) {
19     signal(SIGTTOU, SIG_IGN);
20     signal(SIGTTIN, SIG_IGN);
21     signal(SIGTSTP, SIG_IGN);
22     if (0 != fork()) exit(0);
23     if (-1 == setsid()) exit(0);
24     signal(SIGHUP, SIG_IGN);
25     if (0 != fork()) exit(0);
26     if (0 != chdir("/")) exit(0);
27 }
28 void do_something()
29 {
30     FILE *pf = fopen("test.tmp","wb");
31     int i = 10;
32     while(i) {
33         fwrite("aaaa\n",1,4,pf);
34         fflush(pf);
35         sleep(10);
36         i--;
37     }
38     fclose(pf);
39 }
40 void show_help(){
41     printf("run with -D to daemon mode.\n");
42 }
43 int main(int argc, char *argv[])
44 {
45     int o;
46     while(-1 != (o = getopt(argc, argv, "hDd"))) {
47         printf("%d\n", o);
48         switch(o) {
49             case 'D': daemonize(); break;
50             case 'd': break;
51             default:
52                 show_help();
53                 return -1;
54              } 
55     }
56     do_something();
57 }

 

关于daemonize()这段代码的分析,提供一个网上的介绍链接详解介绍截图如下:

 

 

参考: https://blog.csdn.net/weixin_38134600/article/details/82802459

51人参与, 0条评论 登录后显示评论回复

你需要登录后才能评论 登录/ 注册