2015-07-16 4 views
3

Я пишу скрипт Bash для отслеживания процесса и обнаружения, когда он разбился. Для этого я контролирую каталог/proc;Linux - когда есть/proc/PID?

start_my_process; 
my_process_id=$!; 
until [[ ! -d "/proc/$my_process_pid" ]]; do 
    # alert the process is dead and restart it... 
done 

Могу ли я гарантировать, что запись процесса в/Proc/будет создан ДО Bash завершает выполнение команды, чтобы начать процесс? Или возможно, что со временем мой чек выше будет выполнен, запись для start_my_process может еще не создаваться?

EDIT: В итоге я фактически пошел против пользовательского решения и выбрал monit, который является прекрасным инструментом сторожевого таймера.

+2

Действительно ли ваш вопрос «как определить, сохраняется ли фоновый процесс?» –

+0

Возможно. Выше было то, как я решил это сделать. Я хочу обнаружить, что процесс мертв. КАК КАК он мертв. – Boon

+1

@ Включайте много общих шаблонов, чтобы сделать это, например monit, вы попробовали? – Anatoly

ответ

4

/proc/<pid> не создано. Это не настоящий каталог.

/proc является виртуальной файловой системой. Когда вы открываете один из своих «файлов» и читаете из его выходного потока, данные предоставляются ядром. Поскольку ядро ​​также отвечает за управление процессом <pid>, ядро ​​скажет вам, что каталог /proc/<pid> существует, как только и до тех пор, пока ядро ​​отслеживает его.

Поскольку bash не сможет установить $!, пока процесс не существует, вы, безусловно, будете безопасно проверять виртуальный каталог процесса под /proc после этого времени.

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