2017-01-25 3 views
1

У меня есть следующий код Баша, который проверяет, что процесс запущен:Убедитесь, что процесс запущен

is_running() { 
ps `cat "$pid_file"` > /dev/null 2>&1 
} 

Проблема заключается в том, что is_running всегда оценивается в true.

$pid_file содержит идентификатор процесса, который не указан при запуске ps. Я хотел бы в этом случае, is_running, чтобы вернуть false.

Как я могу изменить его для этой цели?

+0

Не используйте ' кот' этот путь! – Inian

ответ

3

Вы пропускаете -p вариант:

ps -p PID 

В bash, я бы просто сделать:

is_running() { ps -p $(<"$1") &>/dev/null ;} 

и даст имя файла в качестве аргумента функции:

is_running /pid/file 

  • Вам нужно, чтобы начать использовать новые команды подстановки синтаксис $() вместо загадочного `...`

  • bash поддерживает сокращенную (&>) для индикации перенаправления STDOUT и STDERR

+0

++; как в стороне: при использовании '-p' определенно правильная вещь, потому что это POSIX-совместимый способ передать PID, во всех реализациях' ps' я столкнулся с чем-то вроде 'ps $$' работает слишком. – mklement0