как найти ли сценарий выполненный как nohup законченный или нет?

Я пытался запустить скрипт с помощью nohup как,

nohup script.sh &

Когда я попробовал

ps -ef | grep "script.sh"

Я не мог найти его там за исключением grep, который выполняется с той строкой в качестве параметра.

Я делаю его правильно?. Это означает, что процесс действительно закончил выполнение?Спасибо.

22
задан learner135 31 May 2010 в 13:59
поделиться

3 ответа

В начале вашего сценария оболочки запишите PID в файл (например, в /var/run). Затем вы можете просто найти этот PID, чтобы узнать, завершен процесс или нет. Вы можете получить PID вашего сценария оболочки с помощью встроенной $$ переменной.

Чтобы записать PID, поместите в начало вашего сценария:

echo $$ > /var/run/myscript.pid

Затем, чтобы проверить, запущен ли он еще:

ps -p `cat /var/run/myscript.pid`

Возможно, вы не сможете записать в /var/run как обычный пользователь. Если нет, просто используйте /tmp

16
ответ дан 29 November 2019 в 04:46
поделиться

Подлежит реализации nohup, но в большинстве случаев он будет работать. После выполнения

nohup script.sh &

сохраните PID в переменной. $! PID последнего фонового процесса.

HISPID=$!

Затем вы можете проверить, есть ли он там, с помощью ps или kill:

ps -p $HISPID
kill -0 $HISPID

В отличие от другого опубликованного решения, это не требует изменения script.sh

15
ответ дан 29 November 2019 в 04:46
поделиться

$! определенно является частью ksh и ksh93.

echo $SHELL

покажет вам, какую оболочку вы используете.

Пример разумного использования &

#!/bin/ksh
nohup ./myscript.sh argument1 2>&1> mylogfile &
# do some other task
cnt=0
while [ $cnt -le 100 ]
do
    # work on another task here
    cnt=$(( $cnt + 1 ))
done
wait

Оператор ожидания приостанавливает выполнение любого еще выполняющегося дочернего процесса. Обычно вы не переносите процесс в фоновый режим, ожидаете, что он будет работать вечно, а затем полностью его забываете.

Если вам нужен полностью отсоединенный процесс, который работает вечно, рассмотрите возможность использования демона. Некоторые люди пишут демонов в оболочке - это не лучшая практика, но это делается. Обычно демоны UNIX пишутся на C.

Глава 13 книги Стивенса «Расширенное программирование в среде UNIx» 2ed полностью посвящена демонам.

3
ответ дан 29 November 2019 в 04:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: