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