Igorka як відв’язати процес від терміналу в ubuntu

У лекції присвяченій процесам і задачам в bash викладач розповів нам про команду nohup. яка може захистити процес від сигналу SIGHUP. який посилає своїм дочірнім процесам, процес-батько, коли завершує свою роботу. Коли з текстової консолі Linux або графічного терміналу (gnome-terminal) запускається команда. яка працює у фоновому режимі, то при закритті терміналу або виході з консолі, команда також припинить свою роботу.

Якщо ближче до практики, то мова йде про наступне. Проведемо експеримент. Запускаємо графічний термінал (gnome-terminal) і пишемо в ньому команди:

$ Gnome-calculator
[1] 3075
$ gedit
[2] 3076

$ Nohup: введення ігнорується, висновок додається в `nohup.out '

І також натискаємо Enter. Тепер знову закриваємо термінал, натиснувши на "хрестик". Тепер додатки залишилися працювати і не закрилися. Команду nohup можна використовувати, але є програми з якими вона не спрацьовує. Наприклад, браузер Opera. Набравши, nohup opera # 038; і закривши термінал, Opera також завершить свою роботу.

В оболонці bash є вбудована команда, яка більше підходить для необхідного завдання. Це команда disown. Додатки запущені в терміналі в фоні (додатки запущені зі знаком # 038;), є завданнями або завданнями (jobspec в мане), які формують таблицю завдань. При виході з терміналу bash переглядає цю таблицю і посилає всіх завдань сигнал SIGHUP. Команда disown займається тим, видаляє завдання з таблиці завдань. Подивитися інформацію про команду disown можна в довідці man bash. Про всяк випадок процитую тут фрагмент з довідки:

Without options, each jobspec is removed from the table of active jobs. If jobspec is not present, and neither -a nor -r is supplied, the shell's notion of the current job is used. If the -h option is given, each jobspec is not removed from the table, but is marked so that SIGHUP is not sent to the job if the shell receives a SIGHUP. If no jobspec is present, and neither the -a nor the -r option is supplied, the current job is used. If no jobspec is supplied, the -a option means to remove or mark all jobs; the -r option without a jobspec argument restricts operation to running jobs. The return value is 0 unless a jobspec does not specify a valid job.

Далі кілька прикладів. Відкриваємо термінал і пишемо команди: