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가 ?로 대몬으로 변신했다.