Как создать ответвление процесса, которое не завершается при выходе из оболочки?говорит о «двойном разветвлении»:
Двойной-
fork()
:(emacs &)
Команды внутри фигурных скобок
(
)
выполняются в отдельном процессе оболочки.
Не могли бы вы объяснить, почему это имеет какое-либо значение по сравнению с простым emacs &
. Какой смысл запускать его в среде подоболочки в первую очередь?
решение1
Не могли бы вы объяснить, почему это имеет какое-либо значение по сравнению с простым
emacs &
.
(emacs &)
запускает подоболочку, которая затем запускается emacs &
внутри нее, что означает, что ее stdin
, stdout
, и stderr
привязаны к подоболочке вместо этого. Она становится дважды разветвленной и переживет исходную оболочку (где (emacs &)
была запущена) умирающей. Запуск только emacs &
сохранит stdin
, stdout
, и stderr
привязанными к исходной оболочке.
emacs
на самом деле плохой пример для этого, потому что версия с графическим интерфейсом не будет беспокоиться о том, что она потеряла свои stdin
, stdout
, и stderr
. Вы можете попробовать с (ls -R / &); exit
, а затем выполнить grep для него, чтобы убедиться, что он все еще работает. Приветствуются правки для лучшего примера, чем ls
.
Какой смысл вообще запускать его в среде подоболочки?
Полностью отделить его от первоначальной оболочки (см. выше).