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 될때가 종료는 안되더라도 게속 입력을 받아야된다고 생각? 하고 만들었거든요.
디자인을 하세여 휴먼
디버깅
n 이 0 이 아니라서
해당 댓글은 삭제되었습니다.
그거쓰면 무한 반복되요 ...
문제가 많다..
힌트라도요~~~
그전에 왜 fork를 하고 입력을 받게 짰는지 물어봐도 됨?
저렇게 fork를 하고 parent에서 input quit 비교하는건 아무의미도 없는데
제가 수정을 계속 여러번해서 입력값을 못받는 상황이 와서 옮겼다 놨다 이래논 결과일거에요
일단 종료되는건 당연하지 57번째 줄에서 n=1로 해놨는데
형님 덕분에 끝났습니다 감사합니다 !!