LINUX.ORG.RU

История изменений

Исправление Deleted, (текущая версия) :

Если ваш демон умеет сам реагировать на SIGHUP, он поставит обработчик этого сигнала и запуск этого демона с nohup ничего не поменяет, кроме того

…что этот обработчик не получит управление. Запусти <код на баше> непосредственно и с nohup, и сравни результаты.

Это особенность обработки сигналов, специфичная для bash (и возможно других совместимых шеллов), смотри в man bash описание trap:

Signals ignored upon entry to the shell cannot be trapped, reset or listed.

Если попробовать написать то же самое на другом ЯП (например на питоне), то результат будет другой:

import os
import signal
import sys


def handler(signum, frame):
    print ('Signal handler called with signal', signum)
    sys.stdout.flush()


# Set the signal handler and a 5-second alarm
signal.signal(signal.SIGHUP, handler)

print('PID:', os.getpid())
sys.stdout.flush()
while True:
    pass

SUGHUP отлично ловится что без nohup, что с ним.

Исходная версия Deleted, :

Если ваш демон умеет сам реагировать на SIGHUP, он поставит обработчик этого сигнала и запуск этого демона с nohup ничего не поменяет, кроме того

…что этот обработчик не получит управление. Запусти <код на баше> непосредственно и с nohup, и сравни результаты.

Это особенность обработки сигналов, специфичная для bash (и возможно других совместимых шеллов), смотри в man bash:

Signals ignored upon entry to the shell cannot be trapped, reset or listed.

Если попробовать написать то же самое на другом ЯП (например на питоне), то результат будет другой:

import os
import signal
import sys


def handler(signum, frame):
    print ('Signal handler called with signal', signum)
    sys.stdout.flush()


# Set the signal handler and a 5-second alarm
signal.signal(signal.SIGHUP, handler)

print('PID:', os.getpid())
sys.stdout.flush()
while True:
    pass

SUGHUP отлично ловится что без nohup, что с ним.