Tôi rơi vào hành vi kỳ lạ này, nơi tôi có chương trình chính và một đứa trẻ được chia đôi. Họ được cấp nước tập trung như thế này (các con số là file descriptor):Giết đứa trẻ bị giết chết cha mẹ?
___parent___
| | ____child_____
| 0 stdin | | |
| 1 pipe1[1]----------. | 1 stdout |
| 2 pipe2[1]----------.\ | 2 stderr |
|____________| \`----------> 3 pipe1[0] |
`----------> 5 pipe2[0] |
|______________|
Vì vậy, cha mẹ được nhập từ stdin nhưng chuyển hướng stdout và stderr đến hai ống. Đứa trẻ đã đóng stdin và sử dụng đầu đọc của ống thay thế.
Sau đó, tôi có một chức năng để chỉ giết con:
void killChild(){
printf("Killing %d\n", (int)childID);
fflush(stdout);
kill(childID, SIGKILL);
waitpid(childID, NULL, 0); // getting rid of the zombie
}
Đứa trẻ được thành công giết chết nhưng vấn đề là các mẹ mình bị giết là tốt. Tôi đã kiểm tra PID của đứa trẻ và nó đúng.
Vậy tại sao phụ huynh lại chết?
Tôi thích tên của câu hỏi này. Và nghệ thuật. – Gabe
Phụ huynh nhận được tín hiệu nào? – hochl
Cha mẹ có cố viết thư cho stdout hoặc stderr sau khi giết đứa trẻ không? Nếu vậy, nó chết vì SIGPIPE. Bạn đang thay đổi việc xử lý SIGCHLD? –