작성
·
279
0
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/wait.h>
#include <sys/types.h>
int main(int argc, char **argv)
{
int exit_status;
pid_t pid;
struct stat buf;
memset(&buf, 0, sizeof(struct stat));
printf("parent process:%d\n", getpid());
for(int i=0; i<2; i++) {
pid = fork();
if(pid == 0) {
int n = 5;
while(n--) {
// stat("/proc/`getpid()`/stat", &buf);
// printf("gid:%d pid:%d\n", (int)buf.st_gid, (int)getpid());
printf("pid:%d\n", getpid());
sleep(3);
}
}
else if(pid > 0) {
wait(&exit_status);
}
}
printf("Done...\n");
return 0;
}
fork를 완전히 이해했다고 생각했는데, 제 생각 범위에서 일종의 bug 프로세스가 나오는데요....
코드를 보면 각각의 pid를 5번씩 출력하고 끝내야 하는데, 이 출력 마지막에 새로운 프로세스가 5번 더 출력이 되는데 왜 그런건가요....?
답변 2
0
0
아....exit처리를 안해서 그런 것 같습니다.. 그래서 처음에 만들어진 pid가 for문 2번째를 타서 새로 또 만든 것 같네요... 그래도 도움이 될지 모르니 질문은 남기겠습니다 :((((((((((((.....