- Tìm số 0 đầu tiên trong một mảng bit
- Unix Hiển thị thông tin về các tập tin khớp với một trong hai mẫu
- Biểu thức chính quy thay thế nhiều tệp
- Ẩn lệnh từ xtrace
Tôi đã không xử lý điều này trong mã của tôi SIGCHLD
. Quy trình của tôi vẫn bị xóa ngay sau khi chấm dứt. Tôi muốn nó trở thành một quá trình zombie.
Nếu tôi sẽ SIGCHLD
Đặt thành SIG_DFL
Vậy nó có hiệu quả không? Làm cách nào để SIGCHLD
Đặt thành SIG_DFL
?
Tôi muốn biến quá trình này thành một quá trình zombie để tôi có thể chờ đợi
Sau đó đọc trạng thái của tiến trình con trong tiến trình cha.
1 Câu trả lời
Dựa trên lịch sử câu hỏi của bạn, có vẻ như bạn đang gặp khó khăn với vấn đề này. Sau đây là tổng quan về cách thức hoạt động của nó:
Cách xử lý mặc định của SIGCHLD là bỏ qua nó. Nói cách khác, nếu bạn không làm gì cả,Tín hiệu sẽ bị bỏ qua, nhưng zombie sẽ tồn tại trong bảng quy trình. Đó là lý do tại sao bạn luôn có thểChờ đợi
lý do.
Nếu bạn vượt qua tín hiệu
Thủ côngViệc thiết lập cấu hình SIGCHLD thành SIG_IGN có ý nghĩa hơi khác so với mục 1. Khi bạn thiết lập cấu hình này theo cách thủ công, hệ điều hành sẽ ngay lập tức xóa quy trình con khỏi bảng quy trình khi nó chết vàSẽ khôngTạo ra thây ma. Do đó, không còn thông tin nào của tiểu bang để lấy nữa.Chờ đợi
Sẽ thất bại vì ECHILD. (Các hạt nhân Linux từ phiên bản 2.6.9 đều tuân theo hành vi này.)
Signal (SIGCHLD, SIG_DFL); có nghĩa là gì? , chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/23075307/
SIG_DFL (trình xử lý mặc định cho tín hiệu) thực sự có chức năng gì? Tôi quan tâm đến việc gỡ lỗi SIGTSTP. Nó sẽ hoạt động không bình thường đôi chút trong những điều kiện bất thường. Tôi nghi ngờ rằng nếu một trong các luồng ở trạng thái TASK_ININTERRUPTBLE, nó sẽ thực hiện một việc gì đó như
Tôi đang viết một thư viện trong đó tôi sử dụng fork() và execvp() để khởi chạy một chương trình khác. Theo tôi hiểu, execvX() đặt lại trình xử lý tín hiệu "tùy chỉnh" thành SIG_DFL, nhưng nó không đặt bất kỳ trình xử lý tín hiệu nào bị bỏ qua thành
Tôi không xử lý SIGCHLD trong mã của mình. Quy trình của tôi vẫn bị xóa ngay sau khi chấm dứt. Tôi muốn nó trở thành một quá trình zombie. Nếu tôi đặt SIGCHLD thành SIG_DFL thì nó có hoạt động không? Cách thiết lập SIGCHLD thành SI
Trong các định nghĩa sau: #define SIG_ERR (void (*)())-1 #define SIG_DFL (void (*)())0 #define SIG_IGN (void (*)())1
Lỗi phân đoạn được tạo ra nếu tôi đặt trình xử lý tín hiệu cho SIGSEGV như thế này: int *a = NULL; *a = 1; Trình xử lý sẽ được gọi, nhưng trình xử lý tín hiệu này sẽ chỉ được gọi một lần. Vì vậy, tôi đoán hạt nhân Linux sẽ gửi tín hiệu
Tôi có một vấn đề nhỏ có vẻ kỳ lạ. Tôi đã viết đoạn mã này để xử lý tín hiệu. void sig_install(wlist *arg) { struct sigaction sigstruct; //Thực hiện
Tôi đang cố gắng viết một số mã để sử dụng python để thực hiện một số gói tin đánh hơi bằng pyshark. Tôi có đoạn mã sau: import pyshark print('Pyshark demo') capture =
Tôi đã chặn và sau đó chờ tín hiệu thông qua mã sau: sigset_t set; sigfillset(&set); // tất cả các tín hiệu sigprocmask(SIG_SETMASK, &set, NU
Tôi là một lập trình viên xuất sắc, rất giỏi!