#include <stdio.h>
#include <unistd.h>
int main()
{
pid_t pid;
/* fork another process */
pid = fork();
if (pid < 0) { /* error occurred */
fprintf(stderr, "Fork Failed");
exit(-1);
}
else if (pid == 0) { /* child process */
printf("Child Process is running\n");
execlp("/bin/ls", "ls", NULL);
sleep (10);
printf("Child Process Complete\n");
}
else { /* parent process */
/* parent will wait for the child to complete */
wait (NULL);
printf ("Parent Complete\n");
exit(0);
}
}
자식 프로세스에서 ls 호출해서 ls 명령어 수행하고 10초 기다렸다가 Chile Process Complete 출력하고
부모 프로세스로 넘어가서 Parent Complete 출력하는거 아니야?
왜 자꾸 ls 보여주고 난다음에 바로 부모프로세스로 넘어가지??
내 우분투가 이상한가???
슬립 10이 언제부터 10초였냐
너무간단해서분석할것도없군ㄴ요
너도 노답
자살추천
12 횽 뭐가 잘못된거야?
sleep 하니까 10초기다리던데 아니야?
./fork3 해서 실행시키면
Child Process is running 나오고
ls 명령어 친 결과 보여주고
바로 Parent Process Complete 나오는데
1초가 1000이다
그냥 자살해라
뭐지시발 진짜자살해야하나
내컴 10초쯤 기다린다
씨발.... 횽 고마워
근데 왜 자식프로세스에서 밑에 프린트에프문 실행안하는지 알려줘
그거라도 알고 뒈지게 히밤...
sleep(10)이 10초 맞나?아무튼 fork에서 프로세스가 2개가 됬는데 자식 은 if문실행하고 부모는 아래거 실행하는게 왜 이상한건데
동시에 처리되는게 정상
동시에 처리되는데 웨이트 널 때문에 기다려야하는거 아녀?
기다렷다가 차일드프러세스 컴플맅 하고 페어런트 프로세스 컴플릿 아니가?
12 // 윈도우 API의 sleep과 리눅스 API의 sleep은 인자로 들어가는 시간이 서로 다름. 윈도우 API에서는 1000이 1초지만 리눅스 API에서는 1이 1초임
그리고 execlp 문만 주석처리하고 돌려보셈. 10초 기다리고 차일드 프로세스 complete 찍을거임.
execlp에서 차일드 에러 났나보네
ㅇㅇ그거는 아까확인했는데 왜 execlp문 포함시키면 바로 부모로넘어가??
/bin/ls 경로가 없는거아니야?
왜긴. execlp로 함수 호출하면 해당 address space가 불려진 excutable 파일로 덮여쓰여지니까 그렇지.
공룡책 예제 밑에 친절하게 설명도 되어있구만
아...유닉스 좆뉴비라... 두번째 12횽 고슈네 고마워 차일드프로세스가 ls가 되어서 ls 호출하고 종료된 후에 바로 부모로 간다는 소리 맞지?
공룡책은뭐야?
공룡책에 거의 똑같은 예제가 있음. 그래서 그거 보고 질문하는 줄 알았음
wait 에서 잘못된거 아님?