2010-03-03 2 views
59

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

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

Надежда Thats достаточно ясно, я, наверное, просто не хватает что-то невероятно глупое

+1

Связанные см [Разница между поЬир, открестился и &] (http://unix.stackexchange.com/q/3886) на Unix и Linux Stack Exchange. – jww

+0

Для тех, кто ищет более подробный ответ, который говорит о различиях между ** 'nohup',' & 'и' disown' **, [щелкните здесь, чтобы перейти к четвертому ответу] (http: // stackoverflow. ком/а/37531889/+1459669). –

ответ

71

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

$ myscript & 

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

+1

Я знал, что это будет что-то легкое, спасибо тонне ... Linux просто не моя вещь, но я пытаюсь ускориться ... Кстати, будет ли это работать в сочетании с nohup? – LorenVS

+0

@ LorenVS, я так думаю. –

+0

Оценка, спасибо за помощь Carl – LorenVS

22

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

Б.Г.

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

+0

Спасибо, это классный маленький трюк ... Поначалу действительно ценят некоторые из раковины ... – LorenVS

27
nohup cmd 

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

Вы можете совместить это с фоновым,

nohup cmd & 

и избавиться от продукции,

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

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

+0

Прохладный, сумасшедший, как все сочетается, я думаю, что сначала мне придет заказ, но я полагаю, вы могли бы просто запомнить его (что вы написали или «nohup cmd &>/dev/null 2> & 1» :)) – LorenVS

+0

Я наткнулся на это сегодня вечером. Я сражался со сценарием оболочки в течение 2 дней, и это предложение заработало. Спасибо, много! –

+0

Удивительно, это очень полезно. При работе в фоновом режиме вы можете каждый раз проверять вывод команды с помощью 'tail nohup.out', это отображает последние 10 строк вывода команды. Я использую это для заданий резервного копирования rsync, чтобы посмотреть, в каком файле он находится. –

23

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

  • & ставит работу в фоновом режиме.

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

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

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

Я не могу найти 'disown' на Debian или OS X. Я думал, что это была программа, но я, кажется, ошибаюсь. Что это? – jww

+0

[команда disown] (http://www.cyberciti.biz/faq/unix-linux-disown-command-examples-usage-syntax/) и на [OSX] (http://ss64.com/osx/disown .html) –

+4

Это лучший ответ. Наиболее всеобъемлющий. –

Смежные вопросы