POSIX không chỉ định rằng PID của mỗi quy trình mới có được bằng cách tăng PID trước đó. Nó chỉ yêu cầu nó là duy nhất.
Trên một hệ thống, nơi các PID được tăng lên trên mỗi hệ thống fork()
, tôi đã quan sát thấy các giá trị bao quanh sau khi đạt đến một giới hạn trên (theo kinh nghiệm của tôi là khoảng 2 15 ). Sau khi bọc xung quanh, các PID mới không được tăng nghiêm ngặt, vì một số giá trị PID sẽ vẫn được sử dụng từ các chu kỳ trước.
Không nên có vấn đề gì cho đến khi bạn có 2 N tiến trình chạy đồng thời . Tôi nghi ngờ hệ thống sẽ chạy vào một số giới hạn công suất từ lâu trước khi điều đó xảy ra. Trong trường hợp đó, fork()
cuộc gọi hệ thống sẽ thất bại và có thể được đặt errno
thành EAGAIN
hoặc ENOMEM
( man fork
để biết chi tiết).
Mã thực hiện fork
có thể hoặc không thể kiểm tra xem có bất kỳ PID nào khả dụng hay không. Nó có thể không bận tâm, bởi vì nó giả định rằng tài nguyên hệ thống sẽ cạn kiệt trước khi đến thời điểm đó, hoặc nó có thể kiểm tra rõ ràng để hoàn thiện và xử lý các khả năng trong tương lai. Tôi đã không kiểm tra, và nếu tôi có tôi chỉ có thể giải quyết bất kỳ hạt nhân nào tôi đã xem xét.