Перш за все, кожного разу, коли ви виконуватимете команду, оболонка буде форклом нового процесу, незалежно від того, запускаєте ви його &чи ні. &означає лише, що ви працюєте у фоновому режимі.
Зауважте, це не дуже точно. Деякі команди, як-от cdфункція оболонки, зазвичай не розщеплюють новий процес. type cmdзазвичай скаже вам, чи cmdце зовнішня команда, чи функція оболонки. type typeговорить вам, що typeсама функція оболонки.
nohupце щось інше. Це повідомляє новий процес ігнорувати SIGHUP. Це сигнал, що надсилається ядром, коли батьківська оболонка закрита.
Щоб відповісти на ваше запитання, виконайте наступне:
- run
emacs & (за замовчуванням має працювати в окремому вікні X) .
- на батьківській оболонці запустіть
exit.
Ви помітите, що emacsвікно вбито, незважаючи на те, що він працює у фоновому режимі. Це поведінка за замовчуванням і nohupвикористовується саме для зміни цього.
Виконання роботи у фоновому режимі (з &або bg, я впевнений , іншими снарядами мають інший синтаксис, а) є функцією оболонки, що випливають з можливості сучасних систем багатозадачних. Замість того , щоб розгалуження нового примірника оболонки для кожної програми , яку ви хочете запустити, сучасні оболонок ( bash, zsh, ksh...) буде мати можливість керувати списком програм (або завдань ). Лише одна з них одночасно може бути на передньому плані , тобто вона отримує фокус оболонки. Я б хотів, щоб хтось міг розширити більше відмінностей між процесом, що працює на передньому плані, і процесом на задньому плані (головний з них має доступ до stdin/ stdout).
У будь-якому випадку це не впливає на те, як реагує дитячий процес SIGHUP. nohupробить.
nohupробить. Яку частину ви збентежили?