Tôi có quá trình xử lý chính hai lần và do đó tạo ra hai đứa con. Hai trẻ em được cấp nước tập trung với nhau như thế này:Đứa trẻ cuối cùng được chia đôi sẽ không chết
ls | more
Bây giờ Vấn đề là đứa con thứ hai không bao giờ chết. Tại sao vậy? Khi nào đứa trẻ cuối cùng trong một đường ống chết thực sự?
Xóa một cuộc gọi chờ() cho biết kết quả mong đợi là ls | more
nhưng cung cấp thêm một số hành vi lạ (thiết bị đầu cuối bị kẹt, v.v.).
Đây là mã của tôi:
int main(){
printf("[%d] main\n", getpid());
int pip[2], i;
pipe(pip);
/* CHILDREN*/
for (i=0; i<2; i++){
if (fork()==0){
/* First child */
if (i==0){
printf("[%d] child1\n", getpid());
close(1); dup(pip[1]);
close(pip[0]);
execlp("ls", "ls", NULL);}
/* Second child */
if (i==1){
printf("[%d] child2\n", getpid());
close(0); dup(pip[0]);
close(pip[1]);
execlp("more", "more", NULL);}
}
}
wait(NULL); // wait for first child
wait(NULL); // wait for second child
return 0;
}
Tiêu đề của câu hỏi này nghe có vẻ rất bạo lực. – Marlon
@Marlon haha không thấy nó như thế cho đến bây giờ! – Pithikos