Какова функция команды nohup?

Я новичок в Ubuntu. Я узнал команду

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

Я не могу понять значение «иммунитета к сигналу зависания». О каком типе сигнала это говорит? И, пожалуйста, скажите мне, как использовать эту команду с примером.

18
задан 13 January 2018 в 19:35

6 ответов

Давайте рассмотрим, что вы открыли текстовый редактор gedit с терминала и работали над ним. Если вы закрываете терминал перед закрытием gedit, gedit также закрывается, как только закрывается терминал. и так, что здесь происходит? [F3] работает как дочерний процесс под терминалом. Когда вы закрываете терминал, на процесс, который убивает дочерний процесс, посылается сигнал зависания (SIGHUP).

С другой стороны, если вы хотите, чтобы ваш дочерний процесс (здесь gedit) сохранялся при запуске даже после закрытия родительского терминала вы хотели бы, чтобы ваш процесс не зависел от сигнала зависания. Чтобы закрыть терминал, не закрывайте дочерний процесс. nohup выполняет именно это задание.

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

34
ответ дан 22 May 2018 в 15:34

Давайте рассмотрим, что вы открыли текстовый редактор gedit с терминала и работали над ним. Если вы закрываете терминал перед закрытием gedit, gedit также закрывается, как только закрывается терминал. и так, что здесь происходит? [F3] работает как дочерний процесс под терминалом. Когда вы закрываете терминал, на процесс, который убивает дочерний процесс, посылается сигнал зависания (SIGHUP).

С другой стороны, если вы хотите, чтобы ваш дочерний процесс (здесь gedit) сохранялся при запуске даже после закрытия родительского терминала вы хотели бы, чтобы ваш процесс не зависел от сигнала зависания. Чтобы закрыть терминал, не закрывайте дочерний процесс. nohup выполняет именно это задание.

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

34
ответ дан 17 July 2018 в 23:14

Давайте рассмотрим, что вы открыли текстовый редактор gedit с терминала и работали над ним. Если вы закрываете терминал перед закрытием gedit, gedit также закрывается, как только закрывается терминал. и так, что здесь происходит? [F3] работает как дочерний процесс под терминалом. Когда вы закрываете терминал, на процесс, который убивает дочерний процесс, посылается сигнал зависания (SIGHUP).

С другой стороны, если вы хотите, чтобы ваш дочерний процесс (здесь gedit) сохранялся при запуске даже после закрытия родительского терминала вы хотели бы, чтобы ваш процесс не зависел от сигнала зависания. Чтобы закрыть терминал, не закрывайте дочерний процесс. nohup выполняет именно это задание.

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

34
ответ дан 24 July 2018 в 13:46

Кроме того, что написал @sourvac, это наследие от Back In The Day, когда люди вошли в систему через текстовые только немые терминалы, часто через (оригинальный, аналоговый 110 бод) модем: «зависание» буквально «висит» .

Пид, который невосприимчив к сигналу зависания, будет продолжать работать даже после выхода из системы и повесить трубку. Это было очень полезно на медленных компьютерах, когда задания выполнялись часами в часах, и вы не могли просто оставаться в системе (кому-то еще нужно было использовать терминал, вам нужно было использовать телефон, статический в строке мог бы «bzzt» соединение , и т. д.).

16
ответ дан 22 May 2018 в 15:34
  • 1
    Не только в тот день. Я выполняю большинство моих больших заданий на кластере серверов, в который я вхожу. Если бы я не использовал nohup, мне пришлось бы оставить мой ноутбук подключенным к этим машинам в течение нескольких дней, ожидая окончания работы. – Ray 13 January 2018 в 22:14
  • 2
    @ О том, как их запустить через " at " или как задания cron? – RonJohn 13 January 2018 в 22:46
  • 3
    @RonJohn Конечно. Или через механизм сетки. Я не хотел предлагать, чтобы nohup был единственным вариантом, только что он по-прежнему используется для этой цели сегодня. – Ray 13 January 2018 в 23:38
  • 4
    Возможно, ваши исторические замечания верны. Но ваши выводы о его нынешнем значении неверны. Это не полезно на медленных компьютерах, но полезно для длительных рабочих заданий. Это две разные вещи. Вы используете «nohup» для защиты своей работы от предполагаемого или непреднамеренного отключения вашего терминала. Даже сейчас вы недовольны тем, что работа прерывается, потому что сетевая ошибка отключает ваш терминал, и ваша работа прерывается. – miracle173 14 January 2018 в 14:49
  • 5
    Работы @Ray Cron совершенно неуместны для достижения этого. Cronjobs для периодических задач, вы должны установить среду в cronjob и рассмотреть много других вещей. Может быть, «в» немного легче справиться, но, тем не менее, более сложно, чем nohup. – miracle173 14 January 2018 в 14:50

Кроме того, что написал @sourvac, это наследие от Back In The Day, когда люди вошли в систему через текстовые только немые терминалы, часто через (оригинальный, аналоговый 110 бод) модем: «зависание» буквально «висит» .

Пид, который невосприимчив к сигналу зависания, будет продолжать работать даже после выхода из системы и повесить трубку. Это было очень полезно на медленных компьютерах, когда задания выполнялись часами в часах, и вы не могли просто оставаться в системе (кому-то еще нужно было использовать терминал, вам нужно было использовать телефон, статический в строке мог бы «bzzt» соединение , и т. д.).

16
ответ дан 17 July 2018 в 23:14

Кроме того, что написал @sourvac, это наследие от Back In The Day, когда люди вошли в систему через текстовые только немые терминалы, часто через (оригинальный, аналоговый 110 бод) модем: «зависание» буквально «висит» .

Пид, который невосприимчив к сигналу зависания, будет продолжать работать даже после выхода из системы и повесить трубку. Это было очень полезно на медленных компьютерах, когда задания выполнялись часами в часах, и вы не могли просто оставаться в системе (кому-то еще нужно было использовать терминал, вам нужно было использовать телефон, статический в строке мог бы «bzzt» соединение , и т. д.).

16
ответ дан 24 July 2018 в 13:46
  • 1
    Не только в тот день. Я выполняю большинство моих больших заданий на кластере серверов, в который я вхожу. Если бы я не использовал nohup, мне пришлось бы оставить мой ноутбук подключенным к этим машинам в течение нескольких дней, ожидая окончания работы. – Ray 13 January 2018 в 22:14
  • 2
    @ О том, как их запустить через & quot; at & quot; или как задания cron? – RonJohn 13 January 2018 в 22:46
  • 3
    @RonJohn Конечно. Или через механизм сетки. Я не хотел предлагать, чтобы nohup был единственным вариантом, только что он по-прежнему используется для этой цели сегодня. – Ray 13 January 2018 в 23:38
  • 4
    Возможно, ваши исторические замечания верны. Но ваши выводы о его нынешнем значении неверны. Это не полезно на медленных компьютерах, но полезно для длительных рабочих заданий. Это две разные вещи. Вы используете «nohup» для защиты своей работы от предполагаемого или непреднамеренного отключения вашего терминала. Даже сейчас вы недовольны тем, что работа прерывается, потому что сетевая ошибка отключает ваш терминал, и ваша работа прерывается. – miracle173 14 January 2018 в 14:49
  • 5
    Работы @Ray Cron совершенно неуместны для достижения этого. Cronjobs для периодических задач, вы должны установить среду в cronjob и рассмотреть много других вещей. Может быть, «в» немного легче справиться, но, тем не менее, более сложно, чем nohup. – miracle173 14 January 2018 в 14:50

Другие вопросы по тегам:

Похожие вопросы: