почему новый pid меньше старых?

Есть ли вероятность того, что pid нового процесса меньше, чем существующие? У меня есть процесс демона, который перезапустится, когда будет убит, я записал pids и обнаружил, что pid сначала уменьшился, а затем пошел больше.

Какова возможная причина?

================================================== =============

извините за просьбу и спасибо за ответы.

Кажется, я нашел ответ. / proc / sys / kernel / pid_max показывает 32768 (android os на телефоне), в длительном тесте он должен был превысить это и перераспределить. Еще раз спасибо.

  • Может ли скрипт работать даже после его смерти?
  • Почему мой процесс слишком долго умирает?
  • Как закрыть терминал, не убивая его детей (без запуска `screen`)?
  • Запуск нескольких команд nohup в фоновом режиме
  • Почему процесс / программа становится зомби?
  • ps переключает для отображения PID, PPID, PGID и SID в совокупности
  • Получение исходного вызова команды из / proc / self
  • $! не работает в командной строке
  • 4 Solutions collect form web for “почему новый pid меньше старых?”

    В Linux PID присваиваются по порядку, но в конечном итоге система ударит его ПИД-предел и начнет заново, пропустив уже назначенные PID.

    Я думал, что PID присваиваются случайным образом, чтобы не допустить, чтобы злоумышленники угадали временные имена файлов, которые обычно имеют строковое представление процесса PID в них. Но я был неправ. Я написал следующую небольшую программу C и запустил ее на RHEL 5, x86_64, чтобы проверить:

    #include <stdio.h> #include <string.h> #include <errno.h> #include <stdlib.h> #include <sys/types.h> #include <unistd.h> int main(int ac, char **av) { int cnt; pid_t firstpid = getpid(); long diff = 32768 - firstpid; cnt = diff; printf("Going to fork %d times\n", cnt); while (cnt) { pid_t mypid = getpid(); printf("cnt %d, pid %d\n", cnt, mypid); switch (fork()) { case 0: break; case -1: fprintf(stderr, "fork() problem: %s\n", strerror(errno)); _exit(9); break; default: _exit(0); break; } --cnt; } return 0; } 

    Самый большой цифровой PID, который я мог получить, был 32767, 2 ^ 15-1, что может поместиться в подписанный 2-байтовый короткий. Я буду дядей обезьяны.

    Это устраняет предсказуемость, которая является проблемой безопасности.

    Это нормально. Когда начинается новый процесс, у него есть новый идентификатор процесса, но он не должен быть больше.

    Linux и Unix - лучшая ОС в мире.