Có sự khác biệt nào giữa "danh sách mã 1" và "danh sách mã 2" không? Bởi vì trong Liệt kê Mã 1, quá trình con có thể bắt tín hiệu SIGTERM và thoát ra độc đáo. Nhưng mã listng 2 đang kết thúc đột ngột trên tín hiệu SIGTERM.tín hiệu gọi điện sau ngã ba
Tôi đang sử dụng Linux và C.
Mã 1
if (signal(SIGTERM, stopChild) == SIG_ERR) {
printf("Could not attach signal handler\n");
return EXIT_FAILURE;
}
pid = fork();
Mã 2
pid = fork();
if (signal(SIGTERM, stopChild) == SIG_ERR) {
printf("Could not attach signal handler\n");
return EXIT_FAILURE;
}
Phần lạ là trong Mã 2, cả quá trình con và cha đều đặt trình xử lý tín hiệu cho SIGTERM. Vì vậy, đây là nghĩa vụ phải làm việc. Phải không?
Tôi vừa thử nghiệm nó, hoạt động tốt cho tôi. Cả hai quy trình thoát ra một cách duyên dáng thông qua stopChild() gọi trong cả hai trường hợp. –
Bạn có từng cơ hội gọi fork() từ trong chuỗi không? –
Bạn có thể cung cấp một chương trình ví dụ đầy đủ thể hiện hành vi đó không? – wich