Представьте, что вы пытаетесь запустить сложный сценарий с помощью nohup. Вы можете определить, пытается ли он прочитать stdin, перенаправив stdin на дескриптор файла, из которого нельзя читать. Посмотрите на эти два примера: сначала 0:
rm nohup.out
nohup sh -c 'head -1' 0</dev/null
echo $?
cat nohup.out
Файл nohup.out пуст, а код возврата ($?
) от скрипта равен 0, то есть нормально, так как скрипт только что прочитал конец файла. Теперь попробуйте выполнить тот же сценарий с 0>/dev/null
т.е. 0 открыт только для вывода:
rm nohup.out
nohup sh -c 'head -1' 0>/dev/null
echo $?
cat nohup.out
Это дает сообщение об ошибке в nohup.out
head: error reading 'standard input': Bad file descriptor
и код выхода 1, fail. Предположительно, это более полезно для вас. Вы также можете получить тот же эффект, закрыв stdin командой 0<&-
:
rm nohup.out
nohup sh -c 'head -1' 0<&-
echo $?
cat nohup.out
Вы можете подключиться к сеансу с «другого терминала» (включая другое ssh-соединение). Это позволяет восстановить все, что было в процессе.
Вы всегда можете завершить сеанс экрана сразу после его запуска, используя sudo
, чтобы убить родительский процесс сеанса экрана (названный " экран").
Эта функция полезна только в том случае, если она изначально настроена должным образом (обычно это не так).
Дополнительная литература: