12 pid_t pid;
13 int status;
14 //pid = fork();
15 char *input;
16 char ls[] = "ls";
17 char date[] = "date";
18 char quit[] = "quit";
19 input = (char *)malloc(sizeof(char)*20);
20 int n = 0;
21 printf("parent start ");
22 while (n == 0){
23 //printf("%d ",n);
24 //printf("input? : ");
25 //scanf("%s",input);
26 pid = fork();
27 if (pid == 0) {
28 printf("input?: ");
29 scanf("%s",input);
30 if(strcmp(input,ls) == 0)
31 {
32 execl("/bin/ls","ls","-l",NULL);
33 printf("ls ");
34 }
35 else if(strcmp(input,date) == 0)
36 {
37 execl("/bin/date","date",NULL);
38 printf("date ");
39 }
40 else if(strcmp(input,quit) == 0)
41 {
42 printf("process end ");
43 n = 1;
44 printf("%d ",n);
45 exit(0);
46 }
47 else
48 {
49 printf("command not found ");
50 }
51 }
52 else // if (pid > 0)
53 {
54 (void)waitpid(pid,&status,0);
55 if (strcmp(input,quit) == 0) {exit(0);}
56 printf("parent process end! ");
57 n = 1;
58 }

제가 이 코드를 생각할때 왜 한번 실행되면 종료되는지 의문입니다.. while문안에서 계속 동작되야 된다고 생각하거든요??

혹시 힌트라도 주실 수 있는 분 있으신가요?



출력화면 보여여 달라시는분이 있어서 보여드려요


khs@ubuntu:~/week6_2$ ./ex3
parent start
input?:
 ls
합계 112
-rwxr-xr-x 1 khs khs 8608  6월 10 23:10 ex1
-rw-r--r-- 1 khs khs  530  6월 10 23:02 ex1.c
-rw-r--r-- 1 khs khs  768  6월 10 23:10 ex1_1.c
-rw-r--r-- 1 khs khs 2488  6월 10 23:10 ex1_1.o
-rwxr-xr-x 1 khs khs 8560  6월 11 01:11 ex2
-rw-r--r-- 1 khs khs  806  6월 11 00:52 ex2.c
-rw-r--r-- 1 khs khs 2400  6월 11 00:52 ex2.o
-rw-r--r-- 1 khs khs  590  6월 11 01:11 ex2_1.c
-rw-r--r-- 1 khs khs 2304  6월 10 23:24 ex2_1.o
-rwxr-xr-x 1 khs khs 8664  6월 11 01:45 ex2_2
-rw-r--r-- 1 khs khs  813  6월 11 01:45 ex2_2.c
-rw-r--r-- 1 khs khs 3040  6월 10 23:55 ex2_2.o
-rwxr-xr-x 1 khs khs 8568  6월 11 00:25 ex2_3
-rw-r--r-- 1 khs khs  813  6월 11 00:25 ex2_3.c
-rw-r--r-- 1 khs khs 2440  6월 11 00:25 ex2_3.o
-rwxr-xr-x 1 khs khs 8704  6월 11 09:54 ex3
-rw-r--r-- 1 khs khs 1143  6월 11 10:04 ex3.c
-rw-r--r-- 1 khs khs 2624  6월 11 03:31 ex3.o
parent process end!

하고 종료되버려요 원래는 quit 될때가 종료는 안되더라도 게속 입력을 받아야된다고 생각? 하고 만들었거든요.