pipe와, fork, exec에 대하여 (3단 파이프)
안녕하세요
쉘의 파이프 기능을 구현하다가 궁금한 부분이 있어서 글을 씁니다
fork를 하여 조부모-부모-손자 의 가족관계가 형성된 직후에
조부모는 부모를 wait하고 부모는 손자를 wait하고 손자는 exit만 하며
각 프로세스는 exec을 실행한다고 했을 때
파이프로 이어줄려면 아래와 같이 되는것이 개념적으로는 맞는 것 같은데 실행하면
파이프가 작동하지 않네요 (조부모-부모-손자의 3대 말고 부모-아들인 2대는 잘 작동합니다)
[조부모쪽 FD]
dup2(1번파이프.pipe_fd[1], 1)
close(1번파이프.pipe_fd[0])
close(1번파이프.pipe_fd[1])
exec~
waitpid~
[부모쪽 FD]
dup2(1번파이프.pipe_fd[0], 0)
dup2(2번파이프.pipe_fd[1], 1)
close(1번파이프.pipe_fd[0])
close(1번파이프.pipe_fd[1])
close(2번파이프.pipe_fd[0])
close(2번파이프.pipe_fd[1])
exec~
waitpid~
exit~
[손자쪽 FD]
dup2(2번파이프.pipe_fd[0], 0)
close(2번파이프.pipe_fd[0])
close(2번파이프.pipe_fd[1])
exec~
exit~
간단하게 써 보면 대략 이런 구조입니다
조부모에서 실행된 exec의 내용이 파이프를 거쳐 부모에게 가고 부모에서 다시 exec된 내용은 파이프를 거쳐
손자에게 최종적으로 가는 형태입니다.. 조부모는 read만 stdin이고 손자는 write만 stdout입니다
그냥 이론적으로 간단한 구조이고 문제가 없어보이는데 작동이 안되어서 궁금해서 올려봅니다
급하지 '않'습니다 :)
댓글 달기