30/09/2018, 18:18 
               
            Thắc mắc về ý nghĩa của signal `sig_chld`, `SIGNCHLD` trong C khi sử dụng `fork` trên Linux
sau 1 thời gian đọc tài liệu nhưng có nhiều chỗ mình ko hiểu lắm về cái signal
for( ; ; ){
    abc= xyz; /* chỉ là 1 câu lệnh*/
    if((pid = fork())==0){
        def = pqk; /* chỉ là 1 câu lệnh*/
    }
    signal(SIGCHLD,sig_chld);
    ghk = tuv; /* chỉ là 1 câu lệnh*/
}
đến cái dòng signal(SIGCHLD,sig_chld); thì ko hiểu về cái sig_chld và SIGNCHLD lắm
mong mọi người chỉ giúp
            Bài liên quan
         
                
            




Cho mình hỏi là bạn hiểu về
forkchưa? Mình sẽ giải thích theo cách bạn dễ hiểu nhất nên mình cần hiểu bạn hiểuforknhư thế nào?fork thì mình cũng có hiểu đôi chỗ thôi,
fork() nhân bản tiến trình trước đó, nếu thành công thì fork trả về 0, pid của tiến trình đc nhân bản trả về cho tiến trình cha(cái này mình ko hiểu nó trả về ntn?)
Đúng rồi
Nếu thành công thì fork sẽ trả về 0 cho child process,
pid của child process sẽ được trả về cho parent process thông qua
pid = fork(), với biếnpidgiữ process id của child process.Nếu thất bại thì fork sẽ trả về -1 cho parent process và không có child process nào được tạo ra
Linux hỗ trợ cơ chế signal để giao tiếp giữa các process, các process có thể nói chuyện với nhau qua signal. Trong câu hỏi của bạn thì ta có signal
SIGCHLDsignal này sẽ được gửi đến parent process khi child process thoát, bị interrupted hoặc resumes. Thông thường signal này sẽ bị bỏ qua
Đọc thêm về signal: http://man7.org/linux/man-pages/man7/signal.7.html
Trong đoạn code của bạn, thì signal này sẽ được sử lý bằng signal handler
sign_chldsig_chldlà một hàm do mình tạo ra, khi parent process nhận đượcSIGCHLDthì ngay lập tức hàmsig_chldsẽ được gọi. Trong tài liệu của bạn sẽ có nói vềsig_chldcám ơn bạn, mình đã hiểu rồi