linux system programming, 174p 예제 실행.
#include <sys/types.h> #include <sys/stat.h> #include <stdlib.h> #include <stdio.h> #include <fcntl.h> #include <unistd.h> #include <linux/fs.h> int main (void) { pid_t pid, sid; int i; int j=0; /* create new process */ pid = fork (); printf("Pid is %d \n",pid); if (pid == -1) return -1; else if (pid != 0) exit (EXIT_SUCCESS); /* create new session */ sid =setsid(); if (sid == -1) return -1; printf("sid is %d \n",sid); /* set the working directory to the root directory */ if (chdir("/") == -1){ printf("check"); return -1; } /* close all open files--NR_OPEN is overkill, but works */ printf("FOPEN_MAX is %d\n",FOPEN_MAX); for (i = 0; i < FOPEN_MAX; i++){ //j=close(i); close(i); //printf("%d\n", j); printf("%d is closed\n", i); } /* redirect fd's 0,1,2 to /dev/null */ open("/dev/null", O_RDWR); /* stdin */ dup(0); /* stdout */ dup(0); /* stderror */ /* do its daemon thing... */ while(1){ sleep(1); //printf("this is test\n"); } return 0; }
54번 행 printf가 나오지 않음은 stdout을 죽여서 그런 듯 하다.
NR_OPEN을 찾을 수 없는데, 옛날 프로그램이라 다른 문구로 정의된 듯 하다. FOPEN_MAX로 일단 했다.
pi@raspberrypi:~/Project/cCode/systemProgram $ gcc daemon.c ;./a.out;ps aux | grep pi; Pid is 1939 Pid is 0 sid is 1939 FOPEN_MAX is 16 0 is closed message+ 346 0.0 0.0 6736 3524 ? Ss 6월22 0:04 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only avahi 350 0.0 0.0 5896 2960 ? Ss 6월22 0:02 avahi-daemon: running [raspberrypi.local] pi 846 0.0 0.1 14716 7204 ? Ss 6월22 0:12 /lib/systemd/systemd --user pi 849 0.0 0.0 16864 1772 ? S 6월22 0:00 (sd-pam) pi 891 0.0 0.0 7256 3568 tty1 S+ 6월22 0:00 -bash pi 1939 0.0 0.0 1852 64 ? Ss 19:01 0:00 ./a.out pi 1940 0.0 0.0 8552 2532 pts/1 R+ 19:01 0:00 ps aux pi 1941 0.0 0.0 6116 496 pts/1 S+ 19:01 0:00 grep --color=auto pi root 28022 0.0 0.1 12236 6304 ? Ss 17:16 0:00 sshd: pi [priv] pi 28033 0.0 0.0 12236 3532 ? S 17:16 0:01 sshd: pi@pts/0 pi 28036 0.0 0.0 7392 3856 pts/0 Ss 17:16 0:00 -bash pi 28244 0.1 0.1 11564 6728 pts/0 S+ 17:19 0:06 vi daemon.c root 28246 0.0 0.1 12236 6252 ? Ss 17:19 0:00 sshd: pi [priv] pi 28257 0.0 0.0 12236 3552 ? S 17:19 0:00 sshd: pi@pts/1 pi 28260 0.0 0.0 7548 3924 pts/1 Ss 17:19 0:00 -bash
pid 1939가 ?로 대몬으로 변신했다.