2

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

Есть ли такой способ?

Команду, которую я использую, можно найти ниже.

if kill -0 $(cat "$ pid_file")

Заранее спасибо.

3 ответа3

2

[[ -f "$pid_file ]] && (cat "$pid_file" | head -n 1 | tr -d "\n")

Эта команда вернет ненулевой статус. Если вы хотите "всегда возвращать ноль" (жертвуя разборчивостью):

[[ ! -f "$pid_file ]] || (cat "$pid_file" | head -n 1 | tr -d "\n")

2

Вам нужно условие, чтобы проверить, существует ли файл, и если вы не хотите видеть никаких ошибок при попытке kill PID, который больше не существует, перенаправьте его stderr в /dev/null . Вы получите что-то вроде:

PID_EXISTS=$([[ -f "$pid_file" ]] && kill -0 $(<"$pid_file") 2> /dev/null && echo 1 || echo 0)

Это сохранит 1 для существующего pid и 0 для несуществующего. Вы можете использовать переменную в сравнении, например:

if [[ $PID_EXISTS -eq 1 ]]; then echo FOUND; else echo NOTFOUND; fi

Или просто напечатайте его результат:

echo $PID_EXISTS

Нет cat . Мяу!

1

Или вы можете просто использовать pgrep :

if pgrep -F "$pid_file" &>/dev/null; then
    echo yep
else
    echo nope
fi

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .