Принесите работу nohup на передний план

Возможно через Wine; Экранные заставки Windows не являются красивыми, как NDIS-драйверы, они обычные программы Windows с другим расширением, поэтому Windows будет знать, как установить их в качестве заставки.

1
задан 19 January 2016 в 21:49

3 ответа

nohup не отключает команду от терминала, это заставляет ваш скрипт игнорировать SIGHUP и перенаправляет stdout/stderr в файл nohup.out, чтобы команда могла продолжить работу в фоновом режиме после выхода из системы.

nohup автоматически не выполняет команду, выполняемую в фоновом режиме. Нужно сделать это явно, закончив командную строку с помощью &.

$ nohup ./script.sh &
[1] 3390
$ nohup: ignoring input and appending output to ‘nohup.out’

nohup может печатать текущие рабочие задания и их статус. Если команда jobs не может найти ее, то она больше не является дочерним процессом этой оболочки.

$ jobs 
[1]+  Running                 nohup ./script.sh &

Можно вернуть фоновое задание на передний план в bash, используя fg, даже если он запускается с nohup. Но это не изменит перенаправление вывода, которое все равно будет идти в файл nohup.out.

$ fg
nohup ./script.sh

Если вы закроете оболочку / терминал или выйдите из системы, ваша команда перестает быть дочерней этой оболочки. Он относится к процессу дочернего процесса . Если вы выполните поиск в pstree, вы увидите, что теперь он принадлежит процессу 1 (init). Это не может быть возвращено на передний план, потому что переднего плана больше не существует.

15
ответ дан 25 May 2018 в 19:17
  • 1
    If the command jobs cannot find it, then it is no longer a child process of that shell. Это неправильно: попробуйте эту последовательность, чтобы увидеть, как: sleep 100 & disown ; echo Jobs:; jobs; echo Tree:; pstree -ap $$. После этой команды вы все равно увидите работу sleep с тем же самым PID, когда вы его породили, а jobs ничего не напечатает. Единственный способ, которым дочерний процесс может перестать быть ребенком, - это потерять своего родителя (тогда сирота становится дочерью init) или форсированием + выходом (но тогда изменяется PID, поэтому это не оригинальный ребенок). – Ruslan 13 January 2018 в 14:07

Я буду использовать терминальный мультиплексор, но tmux, а не экран. Экран не предназначен для всех целей и задач. Его конфигурация - темное искусство, вероятно, впервые записанное в приложении Necronomicon. Попытка написать свою собственную конфигурацию - это как проблеск Cthulu. Шутки в сторону. Посмотрите на файлы .screenrc. Разумеется, существуют способы оповестить экранную мерзость конфигурации. Byobu делает замечательную работу как завеса между смертными пользователями и нечестивым кодом.

Но, как я уже сказал, я рекомендую tmux вместо этого. Он по-прежнему требует некоторой небольшой конфигурации, но он хорошо документирован, и ваш файл конфигурации не будет выглядеть как тарабарщина. Кроме того, вы начинаете с цветов и строки состояния. Сравните мои файлы screenrc и tmux.conf:

screenrc tmux.conf
3
ответ дан 25 May 2018 в 19:17

Если вам просто интересно посмотреть живую шляпу, это может вам подойти:

nohup script.sh 2>&1 script.out &
# later:
tail -f script.out
0
ответ дан 25 May 2018 в 19:17

Другие вопросы по тегам:

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