2014-10-23 2 views
0

Например, bash pid 3000, и я хочу ограничить дочерний pid в диапазоне [3001,3010].Можно ли ограничить pid дочерних процессов в Linux bash?

Я хочу этого, потому что я пишу бесконечный цикл while в bash, и pid взорвется.

while true;do 
    something; 
    sleep 5; 
done; 

Каждый цикл порождает не менее 3 дочерних процессов (правда, что-то, сон). Таким образом, pid растет со скоростью не менее 3 в секунду. Через какое-то время ps aux покажет неловко большой pid, я думаю, что это нехорошо.

+8

Почему вы думаете, что «большой» ПИД-это «не очень хорошо»? Что вы подразумеваете под «pid будет взорваться?» –

+3

pid - всего лишь номер. Он управляется ОС, поэтому вам не нужно об этом беспокоиться. –

+0

Я знаю, что, когда pid превышает максимальное число, он будет восстанавливаться, но я не могу удержаться, чтобы попытаться не допустить этого. – golopot

ответ

2

ПИД-регуляторы не взрываются. Они перерабатываются ядром. Максимальный номер PID можно увидеть в/proc/sys/kernel/pid_max. Конечно, вы можете изменить это значение, если хотите.

1

Нет, это абсолютно невозможно, так как pid присваивается ядром , когда он запускает системный вызов fork(2). Приложение или библиотека пользовательского уровня не могут изменить это. Действительно, ядро ​​в какой-то момент перерабатывает pids, как answered by Alex.

Вы могли бы сделать большую петлю на fork и exit немедленно дочерний процесс, если идентификатор процесса (с getpid) не подходит, но такой подход с ума, так как вы, возможно, потребуется fork несколько тысяч раз, прежде чем быть удачливым.

Возможно, namespaces(7) может иметь значение.

1

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

Если вы уверены, что вам нужно решить эту проблему, и у вас есть источники до something, взломайте ее, чтобы запустить бесконечный цикл с sleep между итерациями. Тогда вы останетесь в том же PID навсегда.

(или чуть больше от стены, взломать Bash, так что sleep и something являются встроенными модулями тоже. Для записи true уже Bash встроенная, поэтому он не будет на самом деле порождать подпроцесс.)

Смежные вопросы