Только что перешел с bash на zsh.
В bash фоновые задачи продолжают выполняться после выхода из оболочки. Например, здесь dolphin
продолжается выполнение после exit
:
$ dolphin .
^Z
[1]+ Stopped dolphin .
$ bg
[1]+ dolphin . &
$ exit
Это то, что я хочу по умолчанию.
Напротив, поведение zsh состоит в том, чтобы предупреждать о запущенных заданиях exit
, а затем закрывать их, если вы exit
снова. Например, здесь dolphin
закрывается, когда вторая exit
-команда действительно выходит из оболочки:
% dolphin .
^Z
zsh: suspended dolphin .
% bg
[1] + continued dolphin .
% exit
zsh: you have running jobs.
% exit
Как мне сделать здесь поведение zsh по умолчанию, как у bash?
setopt nohup
в своем~/.zshrc
. Тогда запуск команды, основанной на фоновом режиме&
, также всегда будет отвергать ее. Хотя по умолчанию zsh все равно будет напоминать вам, что у вас есть запущенные задания, когда вы пытаетесь выйти. Вы также можете отключить это с помощьюsetopt nocheckjobs
.setopt nocheckjobs
делает то, что хочу. Теперь я нашел доступные варианты вman zshoptions
. Я хочу отключить предупреждение. Я знаю, когда у меня есть фоновые процессы, и они мне не нужны. Я бы хотел закрыть фоновые процессы, если я не запустил их сnohup
. В настоящее время я использую это с функцией оболочки, которая запускает PyCharm в фоновом режиме с помощьюnohup
. Когда я печатаю,pycharm .
он запускаетсяnohup charm $@ &
. Он не закрывается, когда я закрываю терминал, но я все равно получаю это предупреждение и мне приходится печататьexit
дважды.Из документации zsh :
Так что просто установите
NO_HUP
опцию:% setopt NO_HUP
источник
Я обнаружил , что , используя комбинацию
nohup
,&
иdisown
работает для меня, так как я не хочу , чтобы постоянно причиной работы должны выполняться , когда оболочка закрывается.nohup <command> & disown
В то время как раз
&
работал для меняbash
, я нашел только при использованииnohup
,&
илиdisown
на выполнение команд, как сценарий , который вызывает команду Java запустить процесс все равно остановится , когда оболочка закрывается.nohup
заставляет команду игнорироватьNOHUP
иSIGHUP
сигналы от оболочки&
заставляет процесс работать в фоновом режиме на субтерминалеdisown
за которым следует аргумент (индекс номера задания в списке заданий) предотвращает отправку командным интерпретаторомSIGHUP
сигнала дочерним процессам. Использованиеdisown
без аргумента приводит к использованию по умолчанию самого последнего задания.Я нашел
nohup
иdisown
информацию на этой странице , а также&
информация , содержащаяся в этом SO ответ .источник
Обычно я использую
screen
для поддержания фоновых заданий.1) Создайте сеанс экрана:
2) Запустите свои скрипты, службы, демоны или что-то еще
3) Выйти (отсоединить) screen-сессию с
или ярлык
ALT+A then d
Через несколько сотен лет - если вы хотите возобновить сеанс (повторно подключиться):
Если вы хотите узнать, есть ли экранный сеанс, его имя и статус (прикреплен или отключен):
Это решение работает со всеми интерпретаторами терминалов, такими как bash, zsh и т. Д. См. Также
man screen
источник