Вы не упоминаете, работает ли это как приложение X или консольное приложение.
Если это как консольное приложение, конечно, его нужно закрыть. Вы избавились от его ввода / вывода, более технически (псевдо) tty он был включен. Маловероятно, что вы это имели в виду, поэтому давайте предположим, что вы говорите о приложении X.
nohup
должно работать, не уверен, почему это не так. Когда оболочка закрывается, она отправляет SIGHUP
всем процессам в своей группе процессов. nohup говорит команде игнорировать SIGHUP.
Вы также можете попробовать setsid, который отключает процесс от группы процессов
alias emacs='setsid emacs'
Или добавить disown
после&
Наиболее надежным методом является:
Это используется
( &)
для разветвления на задний план иsetsid
отсоединения от управляющего tty.Вы можете поместить это в функцию оболочки:
Возможности:
disown
Команда встроенная:&
действует как разделитель команд и поdisown
умолчанию будет соответствовать самой последней работе, поэтому ее можно сократить до:Double-
fork()
:Команды в скобках
(
)
выполняются в отдельном процессе оболочки.setsid
как предложил Rich, может быть лучшим выбором, потому что он отменяет управляющий TTY процесса, создавая новый сеанс :Тем не менее, это также немного непредсказуемо - это будет только
fork()
фон, если он является лидером группы процессов (что не произойдет, если , например,setsid
используется вsh
скрипте; в таких случаях он просто станет устойчивым к Ctrl- C.)источник
(exec emacs)
работать?(emacs)
. Если подоболочке дается одна команда,exec
подразумевается, по крайней мере, в случаеbash
. То же самое относится кbash -c 'foo'
противbash -c 'exec foo'
. (Однако обратите внимание, что сам emacs может отсоединяться от терминала; например, это делает gvim. Лучше тестировать с помощью программы с известным поведением.)Проверьте настройки оболочки. Вы также можете попробовать экран вместо
nohup
.источник
screen -r
если вы используете егоCtrl-A Ctrl-D
для отключения перед выходом из системы.screen -d -m sh -c "{do stuff } exit"
имеет гораздо больше смысла.