Наиболее надежным методом является:
(setsid emacs &)
Это используется ( &)
для разветвления на задний план и setsid
отсоединения от управляющего tty.
Вы можете поместить это в функцию оболочки:
fork() { (setsid "$@" &); } fork emacs
Возможности:
disown
Встроенная команда:emacs & disown $!
&
действует как разделитель команд и поdisown
умолчанию будет соответствовать самой последней работе, поэтому ее можно сократить до:emacs & disown
Double-
fork()
:(emacs &)
Команды внутри скобок
(
)
выполняются в отдельном процессе оболочки.setsid
Как предложил Rich, может быть лучшим выбором, потому что он отменяет управляющий TTY процесса, создавая новый сеанс :setsid emacs
Тем не менее, это также немного непредсказуемо - это будет только
fork()
фон, если он является лидером группы процессов (что не произойдет, еслиsetsid
используетсяsh
, например, в сценарии; в таких случаях он просто станет устойчивым к Ctrl- C.)