void doWork(){
int fd[2];
int pret = pipe(fd);
close(0);
close(1);
int dret = dup2(fd[1], 1);
close(fd[1]);
while(1){
char buf[256];
system("whoami");
int rret = read(fd[0], buf, 256);
if(/* something interesting */){
return;
}
}
}
int main(int argc, char* argv[]){
int children = 2;
for(unsigned work = 0; work < children; ++work){
pid_t pid = fork();
if(pid == 0){
doWork();
break;
}
}
int status;
wait(&status);
return 0;
}
이 예제에는 어떤 문제가 있습니까? 각 자식 프로세스가 외부 프로그램을 호출하도록 한 다음 파이프에서 해당 프로그램의 출력을 읽으려고합니다. 내 코드는 자식이 1로 설정된 경우에만 작동합니다.병렬 포크 파이프
편집 : fork/pipe를 사용하여 작업 병렬 처리를 수행하려고합니다. 상위 프로세스와 하위 프로세스 간에는 통신이 없습니다. 각 하위 프로세스는 외부 프로그램을 실행하고 출력을 읽고 출력을 처리 한 다음 원하는 출력이 발견 될 때까지 계속합니다.
몇 명의 어린이에게 어떤 문제가 있습니까? 그 행동을 설명해 주시겠습니까? –
나는 전에 말한 것을 되돌립니다. 여러 자식 프로세스가 있으면 정상적으로 실행됩니다. 문제는 둘 이상의 자식 프로세스에서 프로그램이 더 빨라야하지만 완료하는 데 오랜 시간이 걸리지 만 단 하나의 자식 프로세스 만 있으면 단 몇 초만 걸립니다. SunOS 5.10에서 실행하고 있습니다. 어쩌면 그것과 관련이 있나? – Arlen