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ề
fork
chư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ểufork
như 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ếnpid
giữ 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
SIGCHLD
signal 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_chld
sig_chld
là một hàm do mình tạo ra, khi parent process nhận đượcSIGCHLD
thì ngay lập tức hàmsig_chld
sẽ được gọi. Trong tài liệu của bạn sẽ có nói vềsig_chld
cám ơn bạn, mình đã hiểu rồi