Как очистить запуск приложения GUI через терминал (чтобы он не дождался завершения)?

Редактировать 25.10.2016: Если вы не собираетесь использовать спящий режим, потому что вы не можете или вы предпочитаете suspend / S3, тогда вы можете отключить его в Grub, добавив noresume в GRUB_CMDLINE_LINUX_DEFAULT в /etc/default/grub и запустите [ f5]. Вот пример на Chromebook N22, работающем под управлением GalliumOS:

livewire@zc01:~$ systemd-analyze
Startup finished in 8.580s (kernel) + 4.160s (userspace) = 12.740s

livewire@zc01:~$ systemd-analyze
Startup finished in 3.595s (kernel) + 4.254s (userspace) = 7.850s

Я нашел это, потому что мне было любопытно, что часть загрузки «Выполнение сценариев локального подсчета» во время загрузки и немного исследовалась в initramfs, что привело меня к этот параметр, который я использовал ранее, когда моя система не могла проснуться из спящего режима.

Редактировать 06.08.2016: вам следует обновиться до последней версии вашего дистрибутива Linux, который приходит с системойd.

Ингредиенты:

Получите систему UEFI с незащищенным кодом UEFI или Coreboot. Установите SSD. Установите Ubuntu в режиме UEFI. Бонус: сжимайте initramfs с помощью xz lzop и включают только модули. (Вы должны действительно знать, что делаете, прежде чем пытаться это сделать.) Бонус: Удалите ненужные демоны или настройте их для запуска быстрее. Хотя установка по умолчанию уже достаточно хороша. Пример: задание инициализации btrfs, которое ищет пулы для монтирования, пока на этом устройстве нет томов btrfs. Это заставило меня удалить инструменты btrfs из некоторых моих установок.

Я должен сказать, что 32 секунды на самом деле достаточно хороши. Это не будет намного быстрее с традиционным оборудованием. Мой новый Lenovo T530 занимает такое же количество времени, чтобы загрузиться в устаревшем режиме. С новым микро SSD, который я недавно установил, и Ubuntu в режиме UEFI, он до 15 секунд не нажал кнопку питания для входа в систему. По-прежнему кажется, что он тратит 5 секунд во время публикации, но абсолютно не тратит время на запуск реальной операционной системы. Микро SSD имеет скорость передачи 280 Мбайт / с, может быть 500 Мбайт / с SSD может сделать это до 7 секунд. Но разработчикам действительно сокращать время загрузки pre OS (POST, а что нет).

Что касается профилирования загрузки и параллелизма между командами. Эти данные можно рассматривать как датированные или, в конечном итоге, мифы. Я помню, что автоматическое загрузочное профилирование или что-то, что сделало загрузочный профилирование абсолютно лишним, было добавлено в Linux или в базовую систему несколько лет назад, с тех пор я больше не использовал профилирование загрузки после установки нового пакета ядра. Параметр параллелизма оболочки, как говорили, нарушал вещи, но с Systemd и Upstart он тоже должен быть лишним и не должен иметь положительного эффекта.

71
задан 31 October 2010 в 14:59

79 ответов

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

Что-то еще, что говорили другие люди, тоже будет работать. Я поклонник nohup ... Но если вам нужен терминал, вы можете отсоединиться, а затем снова подключиться, вы хотите посмотреть на screen.

Запустить его в терминале и затем запустите что-то, что продолжает толкать выход. Я использую сервер разработки Django, но irssi или даже watch uptime были бы хорошими примерами. Убейте терминал и запустите новый. Запустите screen -r и BOOM, вы вернулись.

screen намного больше, чем это, и вы можете комбинировать его с byobu для лучшего использования терминала. Прочитайте.

17
ответ дан 26 May 2018 в 00:41
  • 1
    Это первое реальное понимание, которое я имел о том, что экран делает / может сделать ... спасибо за конечный совет ... – Peter.O 4 June 2011 в 06:30
  • 2
    экран больше не доступен, но tmux может заменить экран. (tmux, чтобы начать новый сеанс tmux, ctrl + b, затем нажмите d, чтобы отключить, и tmux attach для повторного подключения) – Gman Smith 2 April 2016 в 16:25

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

Что-то еще, что говорили другие люди, тоже будет работать. Я поклонник nohup ... Но если вам нужен терминал, вы можете отсоединиться, а затем снова подключиться, вы хотите посмотреть на screen.

Запустить его в терминале и затем запустите что-то, что продолжает толкать выход. Я использую сервер разработки Django, но irssi или даже watch uptime были бы хорошими примерами. Убейте терминал и запустите новый. Запустите screen -r и BOOM, вы вернулись.

screen намного больше, чем это, и вы можете комбинировать его с byobu для лучшего использования терминала. Прочитайте.

17
ответ дан 25 July 2018 в 22:58

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

Что-то еще, что говорили другие люди, тоже будет работать. Я поклонник nohup ... Но если вам нужен терминал, вы можете отсоединиться, а затем снова подключиться, вы хотите посмотреть на screen.

Запустить его в терминале и затем запустите что-то, что продолжает толкать выход. Я использую сервер разработки Django, но irssi или даже watch uptime были бы хорошими примерами. Убейте терминал и запустите новый. Запустите screen -r и BOOM, вы вернулись.

screen намного больше, чем это, и вы можете комбинировать его с byobu для лучшего использования терминала. Прочитайте.

17
ответ дан 2 August 2018 в 04:21

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

Что-то еще, что говорили другие люди тоже будет работать. Я поклонник nohup ... Но если вам нужен терминал, вы можете отсоединиться, а затем снова подключиться, вы хотите посмотреть экран .

  1. Запустите его в терминале, а затем запустите что-то, что продолжает выталкивать вывод. Я использую сервер разработки Django, но irssi или даже время безотказной работы было бы хорошим примером.
  2. Убейте терминал и запустите новый.
  3. Запустите экран -r и BOOM, вы снова вошли.

экран намного больше этого и вы можете комбинировать его с byobu для лучшего использования терминала. Прочитайте.

17
ответ дан 4 August 2018 в 20:51

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

Что-то еще, что говорили другие люди тоже будет работать. Я поклонник nohup ... Но если вам нужен терминал, вы можете отсоединиться, а затем снова подключиться, вы хотите посмотреть экран .

  1. Запустите его в терминале, а затем запустите что-то, что продолжает выталкивать вывод. Я использую сервер разработки Django, но irssi или даже время безотказной работы было бы хорошим примером.
  2. Убейте терминал и запустите новый.
  3. Запустите экран -r и BOOM, вы снова вошли.

экран намного больше этого и вы можете комбинировать его с byobu для лучшего использования терминала. Прочитайте.

17
ответ дан 6 August 2018 в 04:25

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

Что-то еще, что говорили другие люди тоже будет работать. Я поклонник nohup ... Но если вам нужен терминал, вы можете отсоединиться, а затем снова подключиться, вы хотите посмотреть экран .

  1. Запустите его в терминале, а затем запустите что-то, что продолжает выталкивать вывод. Я использую сервер разработки Django, но irssi или даже время безотказной работы было бы хорошим примером.
  2. Убейте терминал и запустите новый.
  3. Запустите экран -r и BOOM, вы снова вошли.

экран намного больше этого и вы можете комбинировать его с byobu для лучшего использования терминала. Прочитайте.

17
ответ дан 7 August 2018 в 22:32

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

Что-то еще, что говорили другие люди тоже будет работать. Я поклонник nohup ... Но если вам нужен терминал, вы можете отсоединиться, а затем снова подключиться, вы хотите посмотреть экран .

  1. Запустите его в терминале, а затем запустите что-то, что продолжает выталкивать вывод. Я использую сервер разработки Django, но irssi или даже время безотказной работы было бы хорошим примером.
  2. Убейте терминал и запустите новый.
  3. Запустите экран -r и BOOM, вы снова вошли.

экран намного больше этого и вы можете комбинировать его с byobu для лучшего использования терминала. Прочитайте.

17
ответ дан 10 August 2018 в 10:40

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

Что-то еще, что говорили другие люди тоже будет работать. Я поклонник nohup ... Но если вам нужен терминал, вы можете отсоединиться, а затем снова подключиться, вы хотите посмотреть экран .

  1. Запустите его в терминале, а затем запустите что-то, что продолжает выталкивать вывод. Я использую сервер разработки Django, но irssi или даже время безотказной работы было бы хорошим примером.
  2. Убейте терминал и запустите новый.
  3. Запустите экран -r и BOOM, вы снова вошли.

экран намного больше этого и вы можете комбинировать его с byobu для лучшего использования терминала. Прочитайте.

17
ответ дан 13 August 2018 в 17:12
  • 1
    Это первое реальное понимание, которое я имел о том, что экран делает / может сделать ... спасибо за конечный совет ... – Peter.O 4 June 2011 в 06:30
  • 2
    экран больше не доступен, но tmux может заменить экран. (tmux, чтобы начать новый сеанс tmux, ctrl + b, затем нажмите d, чтобы отключить, и tmux attach для повторного подключения) – Gman Smith 2 April 2016 в 16:25

Предположим, что gedit - это программа, которую вы хотите запустить отдельно (ака. «disown», «disentangle», «disouple»). Существуют разные способы в зависимости от того, что вы хотите сделать точно:

Программа уже запущена

Отключено:

disown -h - это путь, если вы хотите сделать это с уже запущенной программой (т. е. если вы забыли nohup это). Сначала вам нужно остановить его, используя Ctrl + Z. Затем вы можете вставить в скобку с помощью bg [jobId] (например, bg 1). Вы получаете список рабочих заданий с их jobId с помощью jobs. После этого вы можете отделить его от терминала с помощью disown -h %[jobId]. Пример сеанса терминала:

confus@confusion:~$ gedit 
^Z
[1]+  Stopped                 gedit
confus@confusion:~$ jobs
[1]+  Stopped                 gedit
confus@confusion:~$ bg 1
[1]+ gedit &
confus@confusion:~$ disown -h %1
confus@confusion:~$ exit

Программа еще не запущена

nohup

nohup не всегда присутствует на всех машинах. Если вы знаете, что хотите разделить заранее, вы будете использовать:

nohup gedit &

Возможно, вам захочется также перенаправить вывод оболочки, а ваша программа - на псевдо-источник, поэтому: nohup ./myprogram > foo.out 2> bar.err < /dev/null &. Вы хотите перенаправить вывод, чтобы он не был раздражен им или использовать его позже. Нулевой вход может помочь предотвратить hickups в ssh.

Subhell:

Вы можете добиться аналогичного эффекта с помощью

confus@confusion:~$ (geany 2>&1 /dev/null &)

Скобки открываются новая подоболочка для запуска gedit in. 2>&1 /dev/null перенаправляет вывод оболочки в никуда (подавление вывода). И & в конце ставит процесс в фоновом режиме.

Терминальное мультиплексирование

Также терминальное мультиплексирование с использованием экрана или byobu. Вы в основном запускаете программу самостоятельно. Я действительно могу рекомендовать byobu по другим причинам. Ниже приведен список ярлыков boybu, которые могут пригодиться для ваших первых шагов:

Полезно:

F2 Создать новое окно F3 Перейти к следующему окну F4 Перейти к предыдущему Окно F6 Отсоедините от сеанса и выйдите из системы Shift-F6 Отсоедините от сеанса, но не выходите из системы F7 Войдите в режим прокрутки / поиска Ctrl-F5 Подключите все сокеты или агенты SSH / GPG

Менее полезно: [!d33 ]

Ctrl Разделить экран по горизонтали - Ctrl-F2 Сдвинуть экран по вертикали - Z Перенести фокус на следующий раскол - Shift-F4 Переместить фокус на предыдущий сплит - Shift-F5 Свернуть все расщепления - F5 Обновить все уведомления о состоянии - F8 Переименовать текущее окно - F9 Запустить меню настройки Byobu - F12 Экран исчезновения экрана GNU - Alt-Pageup Прокрутите назад историю этого окна - Alt-Pagedown Прокрутите вперед по истории этого окна - Ctrl-a-! Включите или отключите все комбинации клавиш Byobu -

. «De» и другие

at - отличный полезный инструмент для запуска команды в запланированное время. Это может быть «неправильно использовано» для отсоединения команды от оболочки:

echo './myprogram myoption1 myoption2' | at now

Также вы можете посмотреть setsid и start-stop-daemon, но другие методы должны быть достаточными.

79
ответ дан 26 May 2018 в 00:42
  • 1
    Совет. Если есть только одно задание, идентификатор задания является необязательным, например. вместо bg %1 вы можете просто ввести bg. – MasterMastic 15 March 2016 в 16:51
Таинственный амперсанд «& amp;» суффикс, кажется, заставляет терминал перевести процесс в фоновый режим ... (но я не уверен, что там происходит).

Он делает, и часто то, что вы хотите. Если вы забыли использовать & amp ;, вы можете приостановить программу с помощью ctrl-z, затем поместите ее в фоновом режиме с помощью команды bg и продолжите использовать эту оболочку.

Процесс 'stdin, stdout и stderr все еще подключены к терминалу; вы можете перенаправить их из / в / dev / null или любой другой файл (например, сохранить выходной журнал где-нибудь):

some-program </dev/null &>/dev/null &
# &>file is bash for 1>file 2>&1

Вы можете увидеть процесс на заданиях, вернуть его обратно переднего плана (команда fg) и отправить его сигналы (команда kill).

Некоторые графические программы будут отсоединены от терминала; если это так, когда вы запускаете команду «нормально», вы заметите, что она запускает графическую программу и «выйдет».

Вот короткий сценарий, вы можете разместить его в ~ / bin, который я назвал runbg:

#!/bin/bash
[ $# -eq 0 ] && {  # $# is number of args
  echo "$(basename $0): missing command" >&2
  exit 1
}
prog="$(which "$1")"  # see below
[ -z "$prog" ] && {
  echo "$(basename $0): unknown command: $1" >&2
  exit 1
}
shift  # remove $1, now $prog, from args
tty -s && exec </dev/null      # if stdin is a terminal, redirect from null
tty -s <&1 && exec >/dev/null  # if stdout is a terminal, redirect to null
tty -s <&2 && exec 2>&1        # stderr to stdout (which might not be null)
"$prog" "$@" &  # $@ is all args

Я просматриваю программу ($ prog) перед перенаправлением, чтобы можно было сообщить об ошибках в ее местонахождении. Запустите его как «runbg your-command args ...»; вы можете перенаправить stdout / err в файл, если вам нужно где-то сохранить выход.

За исключением переадресаций и обработки ошибок, это эквивалентно короткому скрипту .

25
ответ дан 26 May 2018 в 00:42
  • 1
    Хорошо, спасибо ... Кажется, что ctrl-z (suspend) снова дает мне доступ к командной строке, но пробегает GUI, пока я не выдаю bg, который, кажется, не приостанавливает его. (имеет смысл) ... Есть еще одна команда, с помощью которой я могу отсоединить графический интерфейс ... Ага! Теперь я понимаю, что вы подразумеваете под sighals (kill command) ... (интересные вещи эти сигналы). Я использовал фрагмент кода, чтобы сделать dd постепенно выводить его статистику .. и он использовал kill + СИГНАЛ ... существует специальный СИГНАЛ, чтобы отсоединить «работу»? – Peter.O 31 October 2010 в 16:41
  • 2
    Я просто заметил ваш комментарий к ответу Рика ... Я пробовал работу disown -p gedit`` и, похоже, удалял работу ... (но я получил системные сообщения в терминале, когда я вручную закрыл gedit ... но я думаю, что на данный момент у меня есть прикрученный терминал ... слишком много экспериментирует :( – Peter.O 31 October 2010 в 16:51
  • 3
    @fred: Работа управляется оболочкой, поэтому никакой сигнал не может контролировать это. Вы можете найти, что лучше всего запустить несколько оболочек - несколько графических терминалов позволяют использовать вкладки, и вы можете использовать экран или tmux. – user 31 October 2010 в 16:52
  • 4
    @fred: Работа управляется оболочкой, поэтому никакой сигнал не может контролировать это. Вы можете найти, что лучше всего запустить несколько оболочек - несколько графических терминалов позволяют использовать вкладки, и вы можете использовать экран или tmux. – user 31 October 2010 в 16:52
  • 5
    @fred: Работа управляется оболочкой, поэтому никакой сигнал не может контролировать это. Вы можете найти, что лучше всего запустить несколько оболочек - несколько графических терминалов позволяют использовать вкладки, и вы можете использовать экран или tmux. – user 31 October 2010 в 16:52
  • 6
    @fred: Работа управляется оболочкой, поэтому никакой сигнал не может контролировать это. Вы можете найти, что лучше всего запустить несколько оболочек - несколько графических терминалов позволяют использовать вкладки, и вы можете использовать экран или tmux. – user 31 October 2010 в 16:52
  • 7
    @fred: Работа управляется оболочкой, поэтому никакой сигнал не может контролировать это. Вы можете найти, что лучше всего запустить несколько оболочек - несколько графических терминалов позволяют использовать вкладки, и вы можете использовать экран или tmux. – user 31 October 2010 в 16:52
  • 8
    @fred: Работа управляется оболочкой, поэтому никакой сигнал не может контролировать это. Вы можете найти, что лучше всего запустить несколько оболочек - несколько графических терминалов позволяют использовать вкладки, и вы можете использовать экран или tmux. – user 31 October 2010 в 16:52
  • 9
    @fred: Работа управляется оболочкой, поэтому никакой сигнал не может контролировать это. Вы можете найти, что лучше всего запустить несколько оболочек - несколько графических терминалов позволяют использовать вкладки, и вы можете использовать экран или tmux. – user 31 October 2010 в 16:52
  • 10
    @fred: Работа управляется оболочкой, поэтому никакой сигнал не может контролировать это. Вы можете найти, что лучше всего запустить несколько оболочек - несколько графических терминалов позволяют использовать вкладки, и вы можете использовать экран или tmux. – user 31 October 2010 в 16:52
  • 11
    @fred: Работа управляется оболочкой, поэтому никакой сигнал не может контролировать это. Вы можете найти, что лучше всего запустить несколько оболочек - несколько графических терминалов позволяют использовать вкладки, и вы можете использовать экран или tmux. – user 31 October 2010 в 16:52
  • 12
    @fred: Работа управляется оболочкой, поэтому никакой сигнал не может контролировать это. Вы можете найти, что лучше всего запустить несколько оболочек - несколько графических терминалов позволяют использовать вкладки, и вы можете использовать экран или tmux. – user 31 October 2010 в 16:52
  • 13
    @fred: Работа управляется оболочкой, поэтому никакой сигнал не может контролировать это. Вы можете найти, что лучше всего запустить несколько оболочек - несколько графических терминалов позволяют использовать вкладки, и вы можете использовать экран или tmux. – user 31 October 2010 в 16:52
  • 14
    @fred: Работа управляется оболочкой, поэтому никакой сигнал не может контролировать это. Вы можете найти, что лучше всего запустить несколько оболочек - несколько графических терминалов позволяют использовать вкладки, и вы можете использовать экран или tmux. – user 31 October 2010 в 16:52
  • 15
    @fred: Работа управляется оболочкой, поэтому никакой сигнал не может контролировать это. Вы можете найти, что лучше всего запустить несколько оболочек - несколько графических терминалов позволяют использовать вкладки, и вы можете использовать экран или tmux. – user 31 October 2010 в 16:52
  • 16
    @fred: Работа управляется оболочкой, поэтому никакой сигнал не может контролировать это. Вы можете найти, что лучше всего запустить несколько оболочек - несколько графических терминалов позволяют использовать вкладки, и вы можете использовать экран или tmux. – user 31 October 2010 в 16:52
  • 17
    @fred: Работа управляется оболочкой, поэтому никакой сигнал не может контролировать это. Вы можете найти, что лучше всего запустить несколько оболочек - несколько графических терминалов позволяют использовать вкладки, и вы можете использовать экран или tmux. – user 31 October 2010 в 16:52
  • 18
    @fred: Работа управляется оболочкой, поэтому никакой сигнал не может контролировать это. Вы можете найти, что лучше всего запустить несколько оболочек - несколько графических терминалов позволяют использовать вкладки, и вы можете использовать экран или tmux. – user 31 October 2010 в 16:52
  • 19
    @fred: лучше не запускать jobs -p command, если у вас есть несколько экземпляров одной команды, работающей в фоновом режиме за раз. вы можете использовать jobs, чтобы найти правильный идентификатор задания, а затем сделать jobs -p <job-id>, чтобы получить PID задания. Лично я считаю, что версия с подоболочкой намного проще. ;-) – htorque 31 October 2010 в 17:22
  • 20
    @htorque, fred: вы можете запустить disout без параметров, чтобы отключить последнюю работу: gedit & disown – user 31 October 2010 в 17:32
  • 21
    @htorque, fred: вы можете запустить disout без параметров, чтобы отключить последнюю работу: gedit & disown – user 31 October 2010 в 17:32
  • 22
    @htorque, fred: вы можете запустить disout без параметров, чтобы отключить последнюю работу: gedit & disown – user 31 October 2010 в 17:32
  • 23
    @htorque, fred: вы можете запустить disout без параметров, чтобы отключить последнюю работу: gedit & disown – user 31 October 2010 в 17:32
  • 24
    @htorque, fred: вы можете запустить disout без параметров, чтобы отключить последнюю работу: gedit & disown – user 31 October 2010 в 17:32
  • 25
    @htorque, fred: вы можете запустить disout без параметров, чтобы отключить последнюю работу: gedit & disown – user 31 October 2010 в 17:32
  • 26
    @htorque, fred: вы можете запустить disout без параметров, чтобы отключить последнюю работу: gedit & disown – user 31 October 2010 в 17:32
  • 27
    @htorque, fred: вы можете запустить disout без параметров, чтобы отключить последнюю работу: gedit & disown – user 31 October 2010 в 17:32
  • 28
    @htorque, fred: вы можете запустить disout без параметров, чтобы отключить последнюю работу: gedit & disown – user 31 October 2010 в 17:32
  • 29
    @htorque, fred: вы можете запустить disout без параметров, чтобы отключить последнюю работу: gedit & disown – user 31 October 2010 в 17:32
  • 30
    @htorque, fred: вы можете запустить disout без параметров, чтобы отключить последнюю работу: gedit & disown – user 31 October 2010 в 17:32
  • 31
    @htorque, fred: вы можете запустить disout без параметров, чтобы отключить последнюю работу: gedit & disown – user 31 October 2010 в 17:32
  • 32
    @htorque, fred: вы можете запустить disout без параметров, чтобы отключить последнюю работу: gedit & disown – user 31 October 2010 в 17:32
  • 33
    @htorque, fred: вы можете запустить disout без параметров, чтобы отключить последнюю работу: gedit & disown – user 31 October 2010 в 17:32
  • 34
    @htorque, fred: вы можете запустить disout без параметров, чтобы отключить последнюю работу: gedit & disown – user 31 October 2010 в 17:32
  • 35
    @htorque, fred: вы можете запустить disout без параметров, чтобы отключить последнюю работу: gedit & disown – user 31 October 2010 в 17:32

Использовать nohup

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

Например:

nohup gedit something
20
ответ дан 26 May 2018 в 00:42
  • 1
    Что nohup? Пожалуйста, дополните. – Oxwivi 31 May 2011 в 17:15
  • 2
    nohup - это программа, которая запускает заданную команду с игнорируемыми сигналами зависания, так что команда может продолжать работать в фоновом режиме после завершения ее родительского процесса. См. Справочную страницу – Florian Diesch 31 May 2011 в 17:23
  • 3
    На самом деле, я думаю, что мой ответ здесь неверен. По дальнейшей мысли, nohup следует использовать в этом сценарии. – boehj 31 May 2011 в 17:26
  • 4
    Когда интерактивная оболочка получает сигнал SIGHUP, может отправлять (или нет, в зависимости от настроек) сигнал SIGHUP всем своим дочерним элементам. Это может случиться (или нет, снова), когда терминал закрыт. Ребенок, не готовый обработать такой сигнал, будет выполнять действие по умолчанию, то есть выйти. Приложение nohup (и встроенное bash disown) не позволяет сигналу достигнуть приложения. – enzotib 31 May 2011 в 17:33
  • 5
    Одно дело быть осторожным в том, что nohup создает файл в текущем каталоге с именем nohup.out. Для получения дополнительной информации см. Справочную страницу . Я предпочитаю disown по этой причине и за то, что disown работает после запуска gedit. – Flimm 31 May 2011 в 19:17

Чтобы запустить приложение и отсоединить его от запущенного терминала, используйте & amp;!

firefox &!
18
ответ дан 26 May 2018 в 00:42
  • 1
    Полезно знать, но это похоже на zsh-only. В bash вам нужно будет вручную запустить disown <pid-of-command> после запуска команды в фоновом режиме. – htorque 31 October 2010 в 16:29
  • 2
    Интересно ... Я собираюсь заглянуть в zsh, но как новичок в Linux, я буду придерживаться bash на данный момент ... Спасибо – Peter.O 1 November 2010 в 06:55
  • 3
    что делает восклицательный знак? – nutty about natty 13 January 2013 в 23:30
  • 4
    ! будет разорвать процесс приложения из терминального процесса, чтобы вы могли закрыть терминал без приложения, которое было запущено после закрытия. Кажется, это вещь zsh, но она удобна. – Rick 14 January 2013 в 20:21
  • 5
    Но это сработало в bash слишком @htorque .... Так что я думаю, это не проблема. – Jasser 22 March 2016 в 13:16

Откройте терминал, введите экран, введите команду, которую вы хотите запустить, закройте терминал. Программа должна продолжать работать в сеансе экрана GNU.

4
ответ дан 26 May 2018 в 00:42
  • 1
    Что такое GNU Screen? – Oxwivi 31 May 2011 в 20:11
  • 2
    Если я получу идею правильно, это своего рода оконный менеджер для командной строки. Он позволяет запускать более одной программы одновременно в сеансе интерфейса командной строки. – RobinJ 31 May 2011 в 20:14
  • 3
    Бёб? – Oxwivi 31 May 2011 в 20:38
  • 4
    Что-то вроде этого, только Byobu проще в использовании. Если я не ошибаюсь, Byobu - просто более простой интерфейс для GNU Screen. – RobinJ 31 May 2011 в 20:39

Это сработало для меня:

$ (nohup gedit 2>/dev/null &)
1
ответ дан 26 May 2018 в 00:42

Как полагают многие, nohup - это то, что нужно учитывать. Но nohup stills остается открытым на терминале и отображает активность программы на терминале, который раздражает. После этого вы можете просто закрыть терминал, чтобы этого избежать. Я нашел очень простой обходной путь, который я использую.

nohup gedit & exit

И все. Он открывает gedit и закрывает терминал при запуске gedit. Поскольку gedit теперь не связан с терминалом, он остается активным.

0
ответ дан 26 May 2018 в 00:42

Это работает даже внутри скрипта (как и псевдонимы, трейлер '& amp;' обычно не разрешен в скриптах, потому что они не являются интерактивными):

bash -i >/dev/null 2>&1 <<<'nohup gedit &'
0
ответ дан 26 May 2018 в 00:42
Таинственный амперсанд «& amp;» суффикс, кажется, заставляет терминал перевести процесс в фоновый режим ... (но я не уверен, что там происходит).

Он делает, и часто то, что вы хотите. Если вы забыли использовать & amp ;, вы можете приостановить программу с помощью ctrl-z, затем поместите ее в фоновом режиме с помощью команды bg и продолжите использовать эту оболочку.

Процесс 'stdin, stdout и stderr все еще подключены к терминалу; вы можете перенаправить их из / в / dev / null или любой другой файл (например, сохранить выходной журнал где-нибудь):

some-program </dev/null &>/dev/null & # &>file is bash for 1>file 2>&1

Вы можете увидеть процесс на заданиях, вернуть его обратно переднего плана (команда fg) и отправить его сигналы (команда kill).

Некоторые графические программы будут отсоединены от терминала; если это так, когда вы запускаете команду «нормально», вы заметите, что она запускает графическую программу и «выйдет».

Вот короткий сценарий, вы можете разместить его в ~ / bin, который я назвал runbg:

#!/bin/bash [ $# -eq 0 ] && { # $# is number of args echo "$(basename $0): missing command" >&2 exit 1 } prog="$(which "$1")" # see below [ -z "$prog" ] && { echo "$(basename $0): unknown command: $1" >&2 exit 1 } shift # remove $1, now $prog, from args tty -s && exec </dev/null # if stdin is a terminal, redirect from null tty -s <&1 && exec >/dev/null # if stdout is a terminal, redirect to null tty -s <&2 && exec 2>&1 # stderr to stdout (which might not be null) "$prog" "$@" & # $@ is all args

Я просматриваю программу ($ prog) перед перенаправлением, чтобы можно было сообщить об ошибках в ее местонахождении. Запустите его как «runbg your-command args ...»; вы можете перенаправить stdout / err в файл, если вам нужно где-то сохранить выход.

За исключением переадресаций и обработки ошибок, это эквивалентно короткому скрипту .

25
ответ дан 25 July 2018 в 22:58
  • 1
    Хорошо, спасибо ... Кажется, что ctrl-z (suspend) снова дает мне доступ к командной строке, но пробегает GUI, пока я не выдаю bg, который, кажется, не приостанавливает его. (имеет смысл) ... Есть еще одна команда, с помощью которой я могу отсоединить графический интерфейс ... Ага! Теперь я понимаю, что вы подразумеваете под sighals (kill command) ... (интересные вещи эти сигналы). Я использовал фрагмент кода, чтобы сделать dd постепенно выводить его статистику .. и он использовал kill + СИГНАЛ ... существует специальный СИГНАЛ, чтобы отсоединить «работу»? – Peter.O 31 October 2010 в 16:41
  • 2
    Я просто заметил ваш комментарий к ответу Рика ... Я пробовал работу disown -p gedit`` и, похоже, удалял работу ... (но я получил системные сообщения в терминале, когда я вручную закрыл gedit ... но я думаю, что на данный момент у меня есть прикрученный терминал ... слишком много экспериментирует :( – Peter.O 31 October 2010 в 16:51
  • 3
    @fred: Работа управляется оболочкой, поэтому никакой сигнал не может контролировать это. Вы можете найти, что лучше всего запустить несколько оболочек - несколько графических терминалов позволяют использовать вкладки, и вы можете использовать экран или tmux. – user 31 October 2010 в 16:52
  • 4
    @fred: лучше не запускать jobs -p command, если у вас есть несколько экземпляров одной команды, работающей в фоновом режиме за раз. вы можете использовать jobs, чтобы найти правильный идентификатор задания, а затем сделать jobs -p <job-id>, чтобы получить PID задания. Лично я считаю, что версия с подоболочкой намного проще. ;-) – htorque 31 October 2010 в 17:22
  • 5
    @htorque, fred: вы можете запустить disout без параметров, чтобы отключить последнюю работу: gedit & disown – user 31 October 2010 в 17:32

Предположим, что gedit - это программа, которую вы хотите запустить отдельно (ака. «disown», «disentangle», «disouple»). Существуют разные способы в зависимости от того, что вы хотите сделать точно:

Программа уже запущена

Отключено:

disown -h - это путь, если вы хотите сделать это с уже запущенной программой (т. е. если вы забыли nohup это). Сначала вам нужно остановить его, используя Ctrl + Z. Затем вы можете вставить в скобку с помощью bg [jobId] (например, bg 1). Вы получаете список рабочих заданий с их jobId с помощью jobs. После этого вы можете отделить его от терминала с помощью disown -h %[jobId]. Пример сеанса терминала:

confus@confusion:~$ gedit ^Z [1]+ Stopped gedit confus@confusion:~$ jobs [1]+ Stopped gedit confus@confusion:~$ bg 1 [1]+ gedit & confus@confusion:~$ disown -h %1 confus@confusion:~$ exit

Программа еще не запущена

nohup

nohup не всегда присутствует на всех машинах. Если вы знаете, что хотите разделить заранее, вы будете использовать:

nohup gedit &

Возможно, вам захочется также перенаправить вывод оболочки, а ваша программа - на псевдо-источник, поэтому: nohup ./myprogram > foo.out 2> bar.err < /dev/null &. Вы хотите перенаправить вывод, чтобы он не был раздражен им или использовать его позже. Нулевой вход может помочь предотвратить hickups в ssh.

Subhell:

Вы можете добиться аналогичного эффекта с помощью

confus@confusion:~$ (geany 2>&1 /dev/null &)

Скобки открываются новая подоболочка для запуска gedit in. 2>&1 /dev/null перенаправляет вывод оболочки в никуда (подавление вывода). И & в конце ставит процесс в фоновом режиме.

Терминальное мультиплексирование

Также терминальное мультиплексирование с использованием экрана или byobu. Вы в основном запускаете программу самостоятельно. Я действительно могу рекомендовать byobu по другим причинам. Ниже приведен список ярлыков boybu, которые могут пригодиться для ваших первых шагов:

Полезно:

F2 Создать новое окно F3 Перейти к следующему окну F4 Перейти к предыдущему Окно F6 Отсоедините от сеанса и выйдите из системы Shift-F6 Отсоедините от сеанса, но не выходите из системы F7 Войдите в режим прокрутки / поиска Ctrl-F5 Подключите все сокеты или агенты SSH / GPG

Менее полезно:

Ctrl Разделить экран по горизонтали - Ctrl-F2 Сдвинуть экран по вертикали - Z Перенести фокус на следующий раскол - Shift-F4 Переместить фокус на предыдущий сплит - Shift-F5 Свернуть все расщепления - F5 Обновить все уведомления о состоянии - F8 Переименовать текущее окно - F9 Запустить меню настройки Byobu - F12 Экран исчезновения экрана GNU - Alt-Pageup Прокрутите назад историю этого окна - Alt-Pagedown Прокрутите вперед по истории этого окна - Ctrl-a-! Включите или отключите все комбинации клавиш Byobu -

. «De» и другие

at - отличный полезный инструмент для запуска команды в запланированное время. Это может быть «неправильно использовано» для отсоединения команды от оболочки:

echo './myprogram myoption1 myoption2' | at now

Также вы можете посмотреть setsid и start-stop-daemon, но другие методы должны быть достаточными.

79
ответ дан 25 July 2018 в 22:58
  • 1
    Совет. Если есть только одно задание, идентификатор задания является необязательным, например. вместо bg %1 вы можете просто ввести bg. – MasterMastic 15 March 2016 в 16:51

Откройте терминал, введите экран, введите команду, которую вы хотите запустить, закройте терминал. Программа должна продолжать работать в сеансе экрана GNU.

4
ответ дан 25 July 2018 в 22:58
  • 1
    Что такое GNU Screen? – Oxwivi 31 May 2011 в 20:11
  • 2
    Если я получу идею правильно, это своего рода оконный менеджер для командной строки. Он позволяет запускать более одной программы одновременно в сеансе интерфейса командной строки. – RobinJ 31 May 2011 в 20:14
  • 3
    Бёб? – Oxwivi 31 May 2011 в 20:38
  • 4
    Что-то вроде этого, только Byobu проще в использовании. Если я не ошибаюсь, Byobu - просто более простой интерфейс для GNU Screen. – RobinJ 31 May 2011 в 20:39

Это сработало для меня:

$ (some-program &) &>/dev/null # Examples: $ (gedit &) &>/dev/null $ (google-chrome &) &>/dev/null
0
ответ дан 25 July 2018 в 22:58

Как полагают многие, nohup - это то, что нужно учитывать. Но nohup stills остается открытым на терминале и отображает активность программы на терминале, который раздражает. После этого вы можете просто закрыть терминал, чтобы этого избежать. Я нашел очень простой обходной путь, который я использую.

nohup gedit & exit

И все. Он открывает gedit и закрывает терминал при запуске gedit. Поскольку gedit теперь не связан с терминалом, он остается активным.

0
ответ дан 25 July 2018 в 22:58

Использовать nohup

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

Например:

nohup gedit something
20
ответ дан 25 July 2018 в 22:58
  • 1
    Что nohup? Пожалуйста, дополните. – Oxwivi 31 May 2011 в 17:15
  • 2
    nohup - это программа, которая запускает заданную команду с игнорируемыми сигналами зависания, так что команда может продолжать работать в фоновом режиме после завершения ее родительского процесса. См. Справочную страницу – Florian Diesch 31 May 2011 в 17:23
  • 3
    На самом деле, я думаю, что мой ответ здесь неверен. По дальнейшей мысли, nohup следует использовать в этом сценарии. – boehj 31 May 2011 в 17:26
  • 4
    Когда интерактивная оболочка получает сигнал SIGHUP, может отправлять (или нет, в зависимости от настроек) сигнал SIGHUP всем своим дочерним элементам. Это может случиться (или нет, снова), когда терминал закрыт. Ребенок, не готовый обработать такой сигнал, будет выполнять действие по умолчанию, то есть выйти. Приложение nohup (и встроенное bash disown) не позволяет сигналу достигнуть приложения. – enzotib 31 May 2011 в 17:33
  • 5
    Одно дело быть осторожным в том, что nohup создает файл в текущем каталоге с именем nohup.out. Для получения дополнительной информации см. Справочную страницу . Я предпочитаю disown по этой причине и за то, что disown работает после запуска gedit. – Flimm 31 May 2011 в 19:17

Чтобы запустить приложение и отсоединить его от запущенного терминала, используйте & amp;!

firefox &!
18
ответ дан 25 July 2018 в 22:58
  • 1
    Полезно знать, но это похоже на zsh-only. В bash вам нужно будет вручную запустить disown <pid-of-command> после запуска команды в фоновом режиме. – htorque 31 October 2010 в 16:29
  • 2
    Интересно ... Я собираюсь заглянуть в zsh, но как новичок в Linux, я буду придерживаться bash на данный момент ... Спасибо – Peter.O 1 November 2010 в 06:55
  • 3
    что делает восклицательный знак? – nutty about natty 13 January 2013 в 23:30
  • 4
    ! будет разорвать процесс приложения из терминального процесса, чтобы вы могли закрыть терминал без приложения, которое было запущено после закрытия. Кажется, это вещь zsh, но она удобна. – Rick 14 January 2013 в 20:21
  • 5
    Но это сработало в bash слишком @htorque .... Так что я думаю, это не проблема. – Jasser 22 March 2016 в 13:16

Это работает даже внутри скрипта (как и псевдонимы, трейлер '& amp;' обычно не разрешен в скриптах, потому что они не являются интерактивными):

bash -i >/dev/null 2>&1 <<<'nohup gedit &'
0
ответ дан 25 July 2018 в 22:58

Это сработало для меня:

$ (nohup gedit 2>/dev/null &)
1
ответ дан 25 July 2018 в 22:58
Таинственный амперсанд «& amp;» суффикс, кажется, заставляет терминал перевести процесс в фоновый режим ... (но я не уверен, что там происходит).

Он делает, и часто то, что вы хотите. Если вы забыли использовать & amp ;, вы можете приостановить программу с помощью ctrl-z, затем поместите ее в фоновом режиме с помощью команды bg и продолжите использовать эту оболочку.

Процесс 'stdin, stdout и stderr все еще подключены к терминалу; вы можете перенаправить их из / в / dev / null или любой другой файл (например, сохранить выходной журнал где-нибудь):

some-program </dev/null &>/dev/null & # &>file is bash for 1>file 2>&1

Вы можете увидеть процесс на заданиях, вернуть его обратно переднего плана (команда fg) и отправить его сигналы (команда kill).

Некоторые графические программы будут отсоединены от терминала; если это так, когда вы запускаете команду «нормально», вы заметите, что она запускает графическую программу и «выйдет».

Вот короткий сценарий, вы можете разместить его в ~ / bin, который я назвал runbg:

#!/bin/bash [ $# -eq 0 ] && { # $# is number of args echo "$(basename $0): missing command" >&2 exit 1 } prog="$(which "$1")" # see below [ -z "$prog" ] && { echo "$(basename $0): unknown command: $1" >&2 exit 1 } shift # remove $1, now $prog, from args tty -s && exec </dev/null # if stdin is a terminal, redirect from null tty -s <&1 && exec >/dev/null # if stdout is a terminal, redirect to null tty -s <&2 && exec 2>&1 # stderr to stdout (which might not be null) "$prog" "$@" & # $@ is all args

Я просматриваю программу ($ prog) перед перенаправлением, чтобы можно было сообщить об ошибках в ее местонахождении. Запустите его как «runbg your-command args ...»; вы можете перенаправить stdout / err в файл, если вам нужно где-то сохранить выход.

За исключением переадресаций и обработки ошибок, это эквивалентно короткому скрипту .

25
ответ дан 2 August 2018 в 04:21
  • 1
    Хорошо, спасибо ... Кажется, что ctrl-z (suspend) снова дает мне доступ к командной строке, но пробегает GUI, пока я не выдаю bg, который, кажется, не приостанавливает его. (имеет смысл) ... Есть еще одна команда, с помощью которой я могу отсоединить графический интерфейс ... Ага! Теперь я понимаю, что вы подразумеваете под sighals (kill command) ... (интересные вещи эти сигналы). Я использовал фрагмент кода, чтобы сделать dd постепенно выводить его статистику .. и он использовал kill + СИГНАЛ ... существует специальный СИГНАЛ, чтобы отсоединить «работу»? – Peter.O 31 October 2010 в 16:41
  • 2
    Я просто заметил ваш комментарий к ответу Рика ... Я пробовал работу disown -p gedit`` и, похоже, удалял работу ... (но я получил системные сообщения в терминале, когда я вручную закрыл gedit ... но я думаю, что на данный момент у меня есть прикрученный терминал ... слишком много экспериментирует :( – Peter.O 31 October 2010 в 16:51
  • 3
    @fred: Работа управляется оболочкой, поэтому никакой сигнал не может контролировать это. Вы можете найти, что лучше всего запустить несколько оболочек - несколько графических терминалов позволяют использовать вкладки, и вы можете использовать экран или tmux. – user 31 October 2010 в 16:52
  • 4
    @fred: лучше не запускать jobs -p command, если у вас есть несколько экземпляров одной команды, работающей в фоновом режиме за раз. вы можете использовать jobs, чтобы найти правильный идентификатор задания, а затем сделать jobs -p <job-id>, чтобы получить PID задания. Лично я считаю, что версия с подоболочкой намного проще. ;-) – htorque 31 October 2010 в 17:22
  • 5
    @htorque, fred: вы можете запустить disout без параметров, чтобы отключить последнюю работу: gedit & disown – user 31 October 2010 в 17:32

Предположим, что gedit - это программа, которую вы хотите запустить отдельно (ака. «disown», «disentangle», «disouple»). Существуют разные способы в зависимости от того, что вы хотите сделать точно:

Программа уже запущена

Отключено:

disown -h - это путь, если вы хотите сделать это с уже запущенной программой (т. е. если вы забыли nohup это). Сначала вам нужно остановить его, используя Ctrl + Z. Затем вы можете вставить в скобку с помощью bg [jobId] (например, bg 1). Вы получаете список рабочих заданий с их jobId с помощью jobs. После этого вы можете отделить его от терминала с помощью disown -h %[jobId]. Пример сеанса терминала:

confus@confusion:~$ gedit ^Z [1]+ Stopped gedit confus@confusion:~$ jobs [1]+ Stopped gedit confus@confusion:~$ bg 1 [1]+ gedit & confus@confusion:~$ disown -h %1 confus@confusion:~$ exit

Программа еще не запущена

nohup

nohup не всегда присутствует на всех машинах. Если вы знаете, что хотите разделить заранее, вы будете использовать:

nohup gedit &

Возможно, вам захочется также перенаправить вывод оболочки, а ваша программа - на псевдо-источник, поэтому: nohup ./myprogram > foo.out 2> bar.err < /dev/null &. Вы хотите перенаправить вывод, чтобы он не был раздражен им или использовать его позже. Нулевой вход может помочь предотвратить hickups в ssh.

Subhell:

Вы можете добиться аналогичного эффекта с помощью

confus@confusion:~$ (geany 2>&1 /dev/null &)

Скобки открываются новая подоболочка для запуска gedit in. 2>&1 /dev/null перенаправляет вывод оболочки в никуда (подавление вывода). И & в конце ставит процесс в фоновом режиме.

Терминальное мультиплексирование

Также терминальное мультиплексирование с использованием экрана или byobu. Вы в основном запускаете программу самостоятельно. Я действительно могу рекомендовать byobu по другим причинам. Ниже приведен список ярлыков boybu, которые могут пригодиться для ваших первых шагов:

Полезно:

F2 Создать новое окно F3 Перейти к следующему окну F4 Перейти к предыдущему Окно F6 Отсоедините от сеанса и выйдите из системы Shift-F6 Отсоедините от сеанса, но не выходите из системы F7 Войдите в режим прокрутки / поиска Ctrl-F5 Подключите все сокеты или агенты SSH / GPG

Менее полезно:

Ctrl Разделить экран по горизонтали - Ctrl-F2 Сдвинуть экран по вертикали - Z Перенести фокус на следующий раскол - Shift-F4 Переместить фокус на предыдущий сплит - Shift-F5 Свернуть все расщепления - F5 Обновить все уведомления о состоянии - F8 Переименовать текущее окно - F9 Запустить меню настройки Byobu - F12 Экран исчезновения экрана GNU - Alt-Pageup Прокрутите назад историю этого окна - Alt-Pagedown Прокрутите вперед по истории этого окна - Ctrl-a-! Включите или отключите все комбинации клавиш Byobu -

. «De» и другие

at - отличный полезный инструмент для запуска команды в запланированное время. Это может быть «неправильно использовано» для отсоединения команды от оболочки:

echo './myprogram myoption1 myoption2' | at now

Также вы можете посмотреть setsid и start-stop-daemon, но другие методы должны быть достаточными.

79
ответ дан 2 August 2018 в 04:21
  • 1
    Совет. Если есть только одно задание, идентификатор задания является необязательным, например. вместо bg %1 вы можете просто ввести bg. – MasterMastic 15 March 2016 в 16:51

Откройте терминал, введите экран, введите команду, которую вы хотите запустить, закройте терминал. Программа должна продолжать работать в сеансе экрана GNU.

4
ответ дан 2 August 2018 в 04:21
  • 1
    Что такое GNU Screen? – Oxwivi 31 May 2011 в 20:11
  • 2
    Если я получу идею правильно, это своего рода оконный менеджер для командной строки. Он позволяет запускать более одной программы одновременно в сеансе интерфейса командной строки. – RobinJ 31 May 2011 в 20:14
  • 3
    Бёб? – Oxwivi 31 May 2011 в 20:38
  • 4
    Что-то вроде этого, только Byobu проще в использовании. Если я не ошибаюсь, Byobu - просто более простой интерфейс для GNU Screen. – RobinJ 31 May 2011 в 20:39

Это сработало для меня:

$ (some-program &) &>/dev/null # Examples: $ (gedit &) &>/dev/null $ (google-chrome &) &>/dev/null
0
ответ дан 2 August 2018 в 04:21

Как полагают многие, nohup - это то, что нужно учитывать. Но nohup stills остается открытым на терминале и отображает активность программы на терминале, который раздражает. После этого вы можете просто закрыть терминал, чтобы этого избежать. Я нашел очень простой обходной путь, который я использую.

nohup gedit & exit

И все. Он открывает gedit и закрывает терминал при запуске gedit. Поскольку gedit теперь не связан с терминалом, он остается активным.

0
ответ дан 2 August 2018 в 04:21

Другие вопросы по тегам:

Похожие вопросы: