2009-05-05 3 views
0

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

+0

в Linux, \t не имел ни малейшего представления о том, что они также зависит от операционной системы .. – franvergara66

ответ

5

Это определяется операционной системой.

В целом, они обычно последовательно назначаются ОС. Однако это поведение не является основанием для принятия решений, поскольку в большинстве спецификаций операционной системы указано, что распределение идентификатора процесса не является детерминированным (т. Е. Оно может быть случайным и может изменяться в будущей версии и т. Д.).

0

Зависит от вашей платформы, но вы не должны зависеть от какого-либо конкретного заказа на ваш pid.

В Windows pid обычно выделяются все чаще, но по мере выхода процессов pid's может быть переработана, и вы увидите случаи, когда более новый процесс имеет более низкий pid, чем более старый процесс. Кроме того, pid выходят из того же пространства имен, что и tid, поэтому вы не увидите увеличения pid на 4 при запуске новых процессов.

0

С вашей точки зрения они будут случайными. Система управляет этими числами и назначает их по мере создания процессов. Быстрый взгляд на PID в настоящее время на моей системе показывает, что все они делятся на 4 ...

+0

Я делаю программу на C с использованием семафора, которая имитирует процесс создания и выпуска, тогда я не знаю, следует ли назначать случайный процесс PID или каждый присваивать последовательные цифры из значения, я хочу, чтобы симуляция была такой же насколько это возможно для процессов разминирования в linux – franvergara66

4

В Linux pids обычно распределяются последовательно по общесистемной основе, но они будут периодически обматываться, и могут быть «пробелы», вызванные другими несвязанными процессами. В крайнем случае у вас может быть «зазор», достаточно широкий, чтобы вызвать эту обертку. Поэтому не принимайте никаких конкретных заказов - вместо этого явным образом отслеживаю идентификаторы PID вашего родителя или дочернего процесса.

+1

Я делаю программу на C с использованием семафора, которая имитирует процесс создания и выпуска, тогда я не знаю, следует ли назначать случайный процесс PID или каждый присваивать последовательные цифры из значения, Я хочу, чтобы симуляция была максимально похожа на процессы разминирования в linux. – franvergara66

+1

Если вы делаете симуляцию, лучший подход с точки зрения фьюзинга - это иметь несколько методов (случайный, последовательный, почти последовательный) и попробовать все вы тестируете каждый. – bdonlan

0

Если вы создаете эти дочерние элементы, вы будете знать pid, pid зависит от планировщика ОС, вас это не волнует.

2

Вот как проверить, что ваша система:

for i in $(seq 20); do ps; done | grep ps 

ИОКи команды «PS» являются последовательными процессами, или как можно ближе к последовательным, как и любой другой абонент мог разумно ожидать, чтобы быть в состоянии породить.

Мой терминал cygwin в Windows выделяет их случайным образом, мой веб-узел выделяет их последовательно (со случайными промежутками, которые предположительно для процессов, выполняемых другими пользователями или серверами).

Некоторые считают, что последовательное распределение ПИД-регулятора является небольшой проблемой безопасности, поскольку оно может утечки информации между пользователями многопользовательской системы.

+3

Лучшим подходом будет для i в 'seq 20'; do sh -c 'echo $$'; done Grepping для «ps» в выводе «ps» может получить некоторый шум в результате (например, другие пользователи, выполняющие ps одновременно) ... – bdonlan

+0

Конечно, я просто думал о быстром тестировании разработчика из командной строки , Если вы написали скрипт или что-то, что полагалось на результат, это другое дело. –

1

В AIX вы часто увидите более крупные (например, 7-значные) PID, и они не обязательно выделяются полупоследовательно (хотя я тестировал цикличность с шагом 2, а на машине был другой пользователь , поэтому это может не означать многого).

Fresh Войти на AIX 5.3 машины:

$ ps 
    PID TTY TIME CMD 
1060910 pts/27 0:00 -ksh 
1155224 pts/27 0:00 ps 
$ 
Смежные вопросы