Яка функція команди nohup?


18

Я новачок в Ubuntu. Я навчився команді

nohup [command]- запустіть <command>імунітет до сигналу відключення

Я не можу зрозуміти значення " непридатного сигналу до зависання ". Про який тип сигналу йдеться? І скажіть, будь ласка, як використовувати цю команду на прикладі.


Якщо вона є у вашій оболонці, disownце краща альтернатива nohup. Виконайте фонову команду з command &або Ctrl-Z, а потім використовуйте disownдля від'єднання її від оболонки.
Джон Кугельман підтримує Моніку

@JohnKugelman, що недостатньо , ви також перенаправляєте вхід, вихід і потік помилок. То чому б не використати "nohup", який робить це автоматично для вас?
чудо173

Відповіді:


34

Розглянемо, що ви відкрили geditтекстовий редактор з терміналу і працюєте над ним. Якщо ви закриєте термінал перед закриттям gedit, gedit також закриється, як тільки закриє термінал. То що тут відбувається? geditПрацює як дочірній процес під терміналом. Коли ви закриваєте термінал , сигнал зависання ( SIGHUP) надсилається до процесу, який вбиває дочірній процес.

З іншого боку, якщо ви хочете, щоб ваш дочірній процес (тут gedit) продовжував працювати навіть після закриття батьківського терміналу, ви хочете, щоб ваш процес не був захищений від сигналу відключення. Так що закриття терміналу не закриває дочірній процес. nohupвиконує саме цю роботу.

nohupне відключає команду від терміналу , вона змушує ваш скрипт ігнорувати SIGHUP і перенаправляє stdout / stderr у файл nohup.out, щоб команда могла продовжувати працювати у фоновому режимі після виходу. Якщо закрити оболонку / термінал або вийти з системи, ваша команда більше не є дочірньою оболонкою. Належить до процесу init. Якщо здійснити пошук, pstreeви побачите, що зараз йому належить процес 1 (init). Це неможливо повернути на перший план, оскільки переднього плану більше не існує.


16

Крім того, що написав @sourvac, це спадщина від Back In The Day, коли люди входили через текстові термінові термінали, часто через (оригінальний, аналоговий 110 бод) модем: "повісити" буквально "повісити телефон ".

Pid, непридатний до сигналу відключення, буде продовжувати працювати навіть після того, як ви вийдете з телефону та відключите телефон . Це було дуже корисно на повільних комп’ютерах, коли завдання працювали годинами та годинами, і ви не могли просто залишатись увійти (комусь іншому потрібно користуватися терміналом, вам потрібно було користуватися телефоном. тощо).


1
Не просто назад. Я запускаю більшість своїх великих завдань на кластерному сервері, в який я впадаю. Якщо я не користувався nohup, мені потрібно було б залишити свій ноутбук підключеним до цих машин на цілі дні, очікуючи завершення роботи.
Рей

@Ray, що робити з їх запуском через "at" або як cron jobs?
RonJohn

@RonJohn Sure. Або через сітчастий двигун. Я не хотіла припускати, що ногуп був єдиним варіантом, просто що він досі використовується для цієї мети.
Рей

1
Можливо, ваші історичні зауваження вірні. Але ваші висновки щодо його теперішньої важливості є помилковими. Це не корисно на повільних комп’ютерах, але корисно для тривалих завдань. Це дві різні речі. Ви використовуєте "nohup", щоб захистити свою роботу від передбачуваного або ненавмисного відключення терміналу. Навіть сьогодні ви не раді, якщо робота припиняє роботу, оскільки помилка мережі відключає ваш термінал, а ваше завдання перервано.
чудо173

@Ray Cron завдання цілком недоречні для досягнення цього. Cronjobs призначені для періодичних завдань, ви повинні встановити середовище в cronjob і розглянути багато інших речей. Можливо, "at" трохи легше впоратися, але, тим не менш, складніше, ніж nohup.
чудо173
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.