Как запустить команду bash, которая не закрывается при выходе из терминала?

2

Я хочу запустить команду, а не закрывать ее при закрытии терминала.

Например, если я бегу top & ; disown, top выходит, когда я покидаю Терминал. Я хочу сохранить top в живых.

Я знаю, что это возможно, так как команда open могу сделать это. (Например, open -e открывает TextEdit, и когда вы выходите из терминала, TextEdit остается открытым.)

Заранее спасибо.

Flare Cat
источник
1
Зачем? Там нет ничего, чтобы увидеть, если процесс не подключен к терминалу /
fd0
top был просто пример команды. Я бы использовал другую команду, которая ничего не выводит.
Flare Cat
Я не вижу никакой проблемы тогда. Если команда ничего не выводит или не принимает ввод, она должна работать. Terminal.app может указывать, что он закрывает процесс, но процесс продолжает выполняться после выхода из Terminal.app. Протестировано в OS X 10.6.
fd0

Ответы:

3

использование экран :

Чтобы начать сеанс и процесс в рамках выполнения screen command (например. screen top ). Отключиться от сеанса с Ctrl Ctrl D ,

Теперь вы можете закрыть окно сеанса терминала или вообще выйти из него, и процесс, запущенный ранее, все еще выполняется.

После (пере) запуска Терминала вы можете получить список всех отдельных сеансов с screen -list, Используйте pid для повторного присоединения к сеансу: screen -R [pid], Чтобы остановить процесс присоединенного сеанса, используйте общие команды (например, Ctrl С за top ) а также exit остановить сеанс.

Если вы хотите запустить процесс в новом, непосредственно отсоединенном сеансе, используйте: screen -d -m command (например. screen -d -m top ). Это создаст новый сеанс экрана, пока вы получаете новое приглашение в текущем сеансе оболочки.

пожалуйста, проверьте man screen для длинного описания, привязок клавиш и настроек.

klanomath
источник
2

Я думаю, что ключ здесь основан на этом утверждении:

Например, если я запускаю top & amp; ; Отказаться, вершина выходит, когда я покидаю Терминал. Я хочу сохранить верность в живых.

Как только вы выходите из Терминала, он сразу же убивает все, что вы запускали. Это где оконечные мультиплексоры вступают в игру.

Решение этой проблемы заключается в использовании tmux ,

tmux - это «мультиплексор терминала», но одна из лучших особенностей в нем заключается в том, что он продолжает работать, даже если вы закрываете терминал.

От их man страница:

tmux - это мультиплексор терминалов: он позволяет создавать, управлять и управлять несколькими терминалами с одного экрана. tmux может быть отсоединен от экрана и продолжать работать в фоновом режиме, а затем снова подключен.

Итак, если вы хотите запустить topВы можете отсоединиться от него, пока он продолжается в фоновом режиме, даже если терминал завершен.

tmux доступен через доморощенного а также MacPorts ,

  • Homebrew: sudo brew install tmux
  • MacPorts: sudo port install tmux

Подробную информацию об установке можно найти на соответствующих сайтах.

Что касается использования tmuxПросто запустите Терминал и выполните tmux, Вы получите экран терминала с зеленой полосой.

enter image description here

Выполнить (например) top,

enter image description here

Выйдите и перезапустите Терминал.

Чтобы получить список сессий:

tmux list-sessions

0: 1 windows (created Wed Sep  7 18:13:21 2016) [132x24]

Прикрепить к этой конкретной сессии

tmux attach -t0 И сессия возвращается.

enter image description here

Allan
источник
0

При использовании команды, которую вы хотите продолжить, вы обычно добавляете что-то с эффектом:

nohup yourcommand &

Nohup останавливает прием сигналов зависания, а & amp; по сути, работает в фоновом режиме, так что вы можете продолжать делать свое дело

Надеюсь, это поможет!

PDL
источник
-1

Некоторые программы запускаются как дочерний процесс в окне терминала, поэтому его закрытие закроет программу. В этом случае запустите такие программы в отдельном процессе соответственно:

  1. Введите полный путь к исполняемому файлу в командной строке (/Applications/Safari.app/Contents/MacOS/safari )

  2. Использовать открыть команда и соответствующий флаг, такой как -a для приложения ( open -a Safari ), который запускает приложения в отдельном процессе (pid). После запуска вы можете просто закрыть окно «Терминал», и приложение останется открытым, в отличие от непосредственного выполнения исполняемых файлов любым способом, который вы сейчас используете.

  3. Команда «osascript», которая является командой терминала OS X для запуска сценариев с «открытой архитектурой сценариев», таких как AppleScript ( osascript -e 'открыть приложение "Safari"' ).

У всех трех есть отдельные средства для выхода из процессов, но они аналогичны каждому из их соответствующих средств для их запуска.

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

В любом случае, последнее: только текущий пользователь может запускать процессы, используя вышеуказанные команды; запускать процессы с этими командами под другим пользователем, необходимо включить учетную запись супер пользователя ( су ), а затем добавьте к каждой команде префикс Судо ,

James Bush
источник