POSIX не указывает, что PID каждого нового процесса получается путем увеличения предыдущего PID. Требуется только, чтобы он был уникальным.
В системе, в которой PID увеличиваются для каждого fork()
, я заметил, что значения оборачиваются после достижения некоторой верхней границы (которая в моем опыте составляет около 2 15 ). После переноса новые PID не увеличиваются строго, поскольку некоторые значения PID все еще будут использоваться из предыдущих циклов.
Не должно быть проблем, пока у вас не будет 2 N одновременно запущенных процессов. Я подозреваю, что система столкнется с некоторым ограничением емкости задолго до того, как это произошло В этом случае fork()
системный вызов потерпит неудачу и, вероятно, будет установлен errno
на EAGAIN
или ENOMEM
( man fork
для подробностей).
Код, который реализует, fork
может или не может проверить, доступны ли какие-либо PID. Это может не беспокоить, потому что предполагается, что системные ресурсы закончились бы до того, как он достигнет этой точки, или он мог бы иметь явную проверку для полноты и обработки будущих возможностей. Я не проверял, и если бы у меня было, я мог бы обращаться только к тому ядру, на которое смотрел.