27 if (fork() == 0) {
28 printf("input?: \n ");
29 scanf("%s",input);
30
31 //fgets(input,sizeof(input),stdin);
32 if(strcmp(input,ls) == 0)
33 {
34 execl("/bin/ls","ls","-l",NULL);
35 printf("ls\n");
36 }
37 else if(strcmp(input,date) == 0)
38 {
39 execl("/bin/date","date",NULL);
40 printf("date\n");
41 }
42 else if(strcmp(input,quit) == 0)
43 {
44 printf("process end\n");
45 n = 1;
46 printf("%d\n",n);
47 exit(0);
48 //exit(1);
49 }
50 else
51 {
52 printf("command not found\n");
53 }
54 }
55 else if (pid > 0)
56 {
57 wait(&status);
58 printf("parent process end!\n");
59 n = 1;
60 exit(0);
61 }
62
63 else
64 {
65 printf("fork fail \n");
66 return -1;
67 }
68
의도는 quit를 치기전까지는 계속 실행 되게 끔 하게 되는거에요..마지막으로 여기 올리기전에 자식프로세스를 if문 안에 들어가기 전에 만들면 한번 실행되고 말아서 그러면 if문에 만들어버려? 하면 fork fail~~~으으..어떻게 해야 할까요.
wait 아래에 if (strcmp(input,quit) == 0) { exit(0); } 해보셈
아 그리고 else if (pid >0) 안에 exit(0)는 지우셈
넣어봤지만 되지 않아요 지금 fork fail 나오거든여 그렇다고 if 문들어가기전에 자식을 만들면 한번 만들고 말고 while문 넣으면 무한반복되요 ㄷㄷㄷㄷ 저거 추가하고 while문을 추가하라는 말인가여?
그리고 wait 다음에 parent process end! 라고 되어있는데 이거 ㄴㄴ child process end임 이건 개념적인 부분
그러면 if pid >0 이 아니라 else로 바꿔버리고 맨 마지막 else는 통째로 지워보자
아 알았다 너 if 안에서 fork를 호출하고 있음 그위에 fork 또 있지않음? 그러면 중복호출이 되어서 프로세스 개수가 4개가 됨
이러니 안되지 if 들어가기전에 pid = fork() 호출하고 if (pid == 0)으로 쓰셈 if (fork() == 0) 이 아니라
답변 늦어서 죄송해요 카페가끝나가지고 집오느라, 말씀하신대로 바꿨는데 한번 하고 마는데..음... 답변늦어서 죄송요