Команды асинхронной оболочки

Честно говоря, я не могу поверить, что не могу найти решение для этого онлайн. Я столкнулся с несколькими вещами, которые кажутся похожими, но ничего, что действительно делает то, что я хочу...

Я пытаюсь использовать оболочку script для запуска команды. Меня не волнует, если/когда/как/почему он заканчивается. Я хочу, чтобы процесс запускался и запускался, но я хочу иметь возможность сразу вернуться к моей оболочке...

Надеюсь, что это достаточно ясно, я, вероятно, просто пропустил что-то невероятно глупое

Ответ 1

Вы можете просто запустить script в фоновом режиме:

$ myscript &

Обратите внимание, что это отличается от размещения & внутри вашего script, который, вероятно, не будет делать то, что вы хотите.

Ответ 2

nohup cmd

не задерживается при закрытии терминала. вывод по умолчанию - nohup.out

Вы можете комбинировать это с фоном,

nohup cmd &

и избавиться от вывода,

nohup cmd > /dev/null 2>&1 &

вы можете также disown выполнить команду. тип cmd, Ctrl-Z, bg, disown

Ответ 3

Кроме того, после запуска программы вы можете нажать Ctrl-Z, которая останавливает вашу программу, а затем введите

Б.Г.

который помещает вашу последнюю остановленную программу в фоновом режиме. (Полезно, если вы начали что-то без "&" и все еще хотите его в backgroung, не перезагружая его)

Ответ 4

Все просто забыли disown. Итак, вот резюме:

  • & помещает задание в фоновом режиме.

    • Заставляет блок блокировать попытку чтения ввода и
    • Делает оболочку не дожидаясь ее завершения.
  • disown удаляет этот процесс из управления заданиями оболочки, но он все равно оставляет его подключенным к терминалу.

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

    • Процесс не получит отправленный SIGHUP.
    • Он полностью независим от управления заданиями и может в принципе использоваться также для работы на переднем плане (хотя это и не очень полезно).
    • Обычно используется с & (в качестве фонового задания).