Что такое двойное разветвление?

Что такое двойное разветвление?

Как создать ответвление процесса, которое не завершается при выходе из оболочки?говорит о «двойном разветвлении»:

  • Двойной- fork():

    (emacs &)
    

    Команды внутри фигурных скобок ( )выполняются в отдельном процессе оболочки.

Не могли бы вы объяснить, почему это имеет какое-либо значение по сравнению с простым emacs &. Какой смысл запускать его в среде подоболочки в первую очередь?

решение1

Не могли бы вы объяснить, почему это имеет какое-либо значение по сравнению с простым emacs &.

(emacs &)запускает подоболочку, которая затем запускается emacs &внутри нее, что означает, что ее stdin, stdout, и stderrпривязаны к подоболочке вместо этого. Она становится дважды разветвленной и переживет исходную оболочку (где (emacs &)была запущена) умирающей. Запуск только emacs &сохранит stdin, stdout, и stderrпривязанными к исходной оболочке.

emacsна самом деле плохой пример для этого, потому что версия с графическим интерфейсом не будет беспокоиться о том, что она потеряла свои stdin, stdout, и stderr. Вы можете попробовать с (ls -R / &); exit, а затем выполнить grep для него, чтобы убедиться, что он все еще работает. Приветствуются правки для лучшего примера, чем ls.

Какой смысл вообще запускать его в среде подоболочки?

Полностью отделить его от первоначальной оболочки (см. выше).

Связанный контент