Ответ 1
Да, идентификаторы процессов могут быть переработаны системой. Они становятся доступными для этого, как только последний дескриптор процесса был закрыт.
Раймонд Чен обсуждал этот вопрос здесь: Когда идентификатор процесса становится доступным для повторного использования?
Идентификатор процесса - это значение, связанное с объектом процесса, и как поскольку объект процесса все еще находится вокруг, так и его процесс Я БЫ. Объект процесса остается до тех пор, пока процесс все еще запущен (процесс неявно сохраняет ссылку на себя) или до тех пор, пока у кого-то еще есть дескриптор объекта процесса.
Если вы думаете об этом, это имеет смысл, поскольку до тех пор, пока есть все еще дескриптор процесса, кто-то может вызвать WaitForSingleObject ожидать завершения процесса или вызвать метод GetExitCodeProcess для получения кода выхода, и что код выхода должен быть сохранен где-то для последующего поиска.
Когда все дескрипторы закрыты, то ядро знает, что никто не собираюсь спросить, продолжает ли процесс или что его выход код (потому что вам нужен дескриптор, чтобы задавать эти вопросы). При этом точка объекта процесса может быть уничтожена, что, в свою очередь, идентификатор процесса.