![nohup и screen не работают при запуске программы в фоновом режиме?](https://rvso.com/image/31668/nohup%20%D0%B8%20screen%20%D0%BD%D0%B5%20%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0%D1%8E%D1%82%20%D0%BF%D1%80%D0%B8%20%D0%B7%D0%B0%D0%BF%D1%83%D1%81%D0%BA%D0%B5%20%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D1%8B%20%D0%B2%20%D1%84%D0%BE%D0%BD%D0%BE%D0%B2%D0%BE%D0%BC%20%D1%80%D0%B5%D0%B6%D0%B8%D0%BC%D0%B5%3F.png)
Я не знаю почему, но моя screen
команда, запущенная на сервере, останавливается сама по себе. Поэтому я попытался использовать nohup
. например:
nohup bzcat a.bz
Но когда я бегу, nohup
это дает мне
nohup: ignoring input and appending output to `nohup.out'
Также для возобновления я запускаю: fg
что дает мне:
-bash: fg: current: no such job
решение1
Сообщение от nohup
совершенно нормальное. Оно просто объясняет, что оно делает. Когда вы запускаете программу с помощью nohup, она больше не использует то, что вы печатаете на терминале, и не выводит ничего на терминал. nohup
перенаправляет вывод программы в файл с именем nohup.out
.
И это очень отличается от nohup
программы, запущенной в фоновом режиме (запуск в фоновом режиме был бы bzcat a.bz &
). Когда программа работает в фоновом режиме, она игнорирует ввод с терминала (только программа, запущенная в фоновом режиме, может использовать то, что вы вводите в терминале, поэтому она называется «процессом переднего плана», потому что это тот, с которым вы фактически взаимодействуете), но она выводит данные на терминал. Можно запустить программу как в режиме nohup, так и в фоновом режиме. Фактически, обычно это так и nohup
используется. Если вы запускаете nohup
программу, но не запускаете ее в фоновом режиме, вы не можете вызвать fg
ее, потому что она на самом деле не находится в фоновом режиме. Она просто не выводит данные на терминал.
nohup
позволяет вам запускать программу в режиме, в котором она будет игнорировать HUP
сигналы. Терминалы обычно посылают HUP
сигналы, когда вы закрываете терминал. Поэтому программа, работающая в фоновом режиме в режиме nohup, не остановится, когда вы закроете терминал, в котором вы ее запустили.