Đú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ến pid 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
The SIGCHLD signal is sent to the parent of a child process when it exits, is interrupted, or resumes after being interrupted. By default the signal is simply ignored.
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
signal(SIGCHLD,sig_chld);
sig_chld là một hàm do mình tạo ra, khi parent process nhận được SIGCHLD thì ngay lập tức hàm sig_chld sẽ được gọi. Trong tài liệu của bạn sẽ có nói về sig_chld