иногда я запускаю приложение в gnome-терминале, но потом мне внезапно приходится перезапускать gnome или что-то в этом роде. Я думаю, что ответ на вопрос также полезен, тогда я хочу отключиться от SSH, где что-то происходит.
Терминальное дерево гнома выглядит так:
gnome-terminal
bash
some-boring-process
Могу ли я «отсоединиться» bash
от gnome-terminal
(или отсоединиться some-boring-process
от bash и перенаправить его вывод куда-нибудь)? Если я просто убью gnome-terminal
, bash
будут убиты все его подпроцессы
Ответы:
Если
some-boring-process
в вашей текущей сессии bash запущено:ctrl-z
чтобы дать вам приглашение bashbg
jobs
командойdisown -h %1
(замените фактический номер задания там).Это ничего не делает для перенаправления вывода - вы должны думать об этом, когда запускаете скучный процесс. [Редактировать] Кажется, есть способ перенаправить его https://gist.github.com/782263
А если серьезно, посмотрите на экран. У меня есть оболочки на удаленном сервере, которые работают уже несколько месяцев.
источник
screen
иногда использую , хотя у него есть свои проблемы, и я не хочу использовать его для каждой сессии bash в моей жизниbash: bg: current: no such job
?Именно для этого были созданы screen и tmux . Вы запускаете оболочку внутри сеанса screen / tmux и можете отключить / повторно подключиться по желанию. Вы также можете иметь несколько сессий оболочки, работающих внутри одного gnome-терминала.
источник
screen
имеет свои проблемы, и мне не хочется использовать его для каждой сессии bash в моей жизниscreen
,,tmux
илиdtach
(возможно, сdvtm
) все отлично подходит для этого, но если это то, что вы не думаете использовать один из них, вы можете использоватьnohup
.источник
screen
имеет свои проблемы, и мне не хочется использовать его для каждой сессии bash в моей жизниnohup
работает ли запущенный процесс, используя-p
опцию (если доступна).-p
возможностиnohup
на страницах руководства; на какой системе вы работаете?tmux
, я использовал-p
опцию на коробке Solaris. У меня также есть смутные воспоминания о том, как сделать это на CentOS-сервере Mongrel (возможно,zsh
есть встроенный модуль, который его поддерживает?), Но я не могу найти никаких документов по этому вопросу.bash
нет .zsh
nohup
Если вы хотите продолжать взаимодействовать с дочерним процессом, а не просто создавать фон и продолжать его работу, на самом деле существует программа с именем retty, которая является проверкой концепции для «кражи» процесса из его текущего tty и повторного подключения к нему. текущий.
Однако он делает некоторые ужасные вещи, в том числе помещает некоторый ассемблерный код в стек повторно присоединенного приложения. И этот код не был обновлен для x86_64.
Есть другая программа, которая использует, возможно, лучший подход, замораживая процесс в пользовательском пространстве в файл, из которого он может быть впоследствии восстановлен (возможно, на другом tty). Это cryopid , и этот проект, похоже, также остановился в фаза проверки концепции, и она не работает с современным Linux, поскольку код стоит. Ах хорошо.
Просто подумал, что это должно быть здесь для полноты. Если вы не против прибегнуть к ужасному вуду, это вполне возможно - по крайней мере, теоретически.
источник
Если я
nohup
запускаю что- то, что хочу завершить, несмотря ни на что (кроме перезагрузки системы), я использую и запускаю это в фоновом режиме. В отличие от экрана и тому подобного, вы не можете присоединиться к процессам. Тем не менее, исключая перенаправление в любом другом месте, можно найти вnohup.out
.Я использую,
screen
когда хочу иметь возможность переключать терминалы для процесса. Например, запуск процесса из дома / работы и переход к другому. Как и любой другой вывод сеанса терминала, в конечном итоге будет прокручиваться верхняя часть буфера.РЕДАКТИРОВАТЬ: Если вы уже запустили процесс, вы можете
disown
запретитьHUP
отправку сигнала при его закрытии.источник
screen
есть свои проблемы, и я не хочу использовать его для каждой сессии bash в моей жизниВы можете заставить процесс (PID) не получать сигнал HUP, когда терминальная сессия закончена. Используйте следующую команду:
источник
nohup: invalid option -- 'p'
, Какую версиюnohup
вы используете в какой системе?-p
Linux нет выбора, поэтому этот ответ относится к Solaris и AIX. Полезно знатьЭтот скрипт отсоединяет дочерний процесс от родительского и назначает его процессу init :
источник