Trên mình trang web về các mẹo tự ống , Dan Bernstein giải thích một điều kiện chủng tộc với select()
và tín hiệu, cung cấp một cách giải quyết và kết luận rằng
Tất nhiên, Điều đúng sẽ là
fork()
trả về một bộ mô tả tệp chứ không phải ID quy trình.
Ý anh ta là gì - đây có phải là điều gì đó về khả năng select()
xử lý các thay đổi trạng thái của họ thay vì phải sử dụng trình xử lý tín hiệu để được thông báo về những thay đổi trạng thái đó không?
signalfd
và đó là một điều trước đó?
wait()
, có những thứ bạn không thể làm, vì vậy ai đó đã phát minh ra SIGCHLD, nhưng đó là một công việc tồi tệ. Theo kinh nghiệm của tôi, và bây giờ mà chúng tồn tại, rắc đẹp, nonblocking wait3()
, wait4()
và / hoặc waitpid()
các ghé cảng tại khu vực trọng điểm (có lẽ chính vòng lặp sự kiện của bạn) là một lựa chọn lớn hơn hẳn.