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

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

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

  • Что случилось с моей оперативной памятью?
  • Текущие переменные среды процесса
  • В Linux вы можете писать в HFS + расширенные атрибуты?
  • Невозможно выполнить двоичный файл в NixOS - нет такого файла или каталога
  • Как я могу надежно получить имя операционной системы?
  • Проверка формата имени файла в оболочке linux
  • ================================================== =============

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

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

  • Попросите пользователя войти в систему под учетной записью root при запуске сценария оболочки
  • Как отладить драйвер, не связанный с устройством в Linux?
  • Получить файлы с именем, содержащим значение даты, меньшее или равное заданной дате ввода
  • df человеко-читаемый расчет
  • Установка Debian PowerPC Linux на IBM IntelliStation POWER 285 9111 не работает на yaboot
  • Восстановить сформированную таблицу разделов на LVM Physical
  • 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 - лучшая ОС в мире.