Подтвердить что ты не робот

Выйти из zsh, но оставить рабочие задания открытыми?

Просто переключился с 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?

4b9b3361

Ответ 1

Запустите программу с помощью &! :

dolphin &!

&! (или, что то же самое, &|) - это ярлык, специфичный для zsh для фона и отключение процесса, так что выход из оболочки оставит его.

Ответ 2

Из документации zsh:

HUP

... В zsh, если у вас есть фоновая работа, выполняемая при выходе оболочки, оболочка предположит, что вы хотите, чтобы ее убили; в этом случае отправляется конкретный сигнал под названием SIGHUP... Если вы часто запускаете задания, которые должны продолжаться, даже когда оболочка вышла, тогда вы можете установить опцию NO_HUP, а фоновые задания будут оставлены в покое.

Итак, просто установите параметр NO_HUP:

% setopt NO_HUP

Ответ 3

Я обнаружил, что использование комбинации nohup, & и disown работает для меня, так как я не хочу, чтобы навсегда запускать задания, которые запускались после выхода оболочки.

nohup <command> & disown

Пока только & работал у меня в bash, я обнаружил, что при использовании только nohup, & или disown при запуске команд, например, script, который вызывает команду java run, процесс все равно остановится при выходе оболочки.

  • nohup заставляет команду игнорировать nohup и SIGHUP сигналы из оболочки
  • & заставляет процесс работать в фоновом режиме в субтерминале
  • disown, за которым следует аргумент (индекс номера задания в списке заданий), запрещает оболочке отправлять сигнал SIGHUP дочерним процессам. Использование disown без аргумента приводит к тому, что по умолчанию используется последнее задание.

Я нашел информацию nohup и disown на на этой странице и & информацию в этот ответ SO.

Ответ 4

Обычно я использую screen для сохранения фоновых заданий.

1) Создайте сеанс экрана:

screen -S myScreenName

2) Запустите свои скрипты, службы, демоны или что-то еще

3) Выйти (снять) экранную сессию с

screen -d

или ярлык ALT+A then d


Через несколько сотен лет - если вы хотите возобновить сеанс (повторное подключение):

screen -r myScreenName

Если вы хотите узнать, есть ли сеанс экрана, его имя и его статус (прикрепленный или отсоединенный):

screen -ls

Это решение работает на всех терминальных интерпретаторах, таких как bash, zsh и т.д. См. Также man screen