Программа обертки, которая устанавливает обработчик сигналов

Можно использовать экранную команду.

http://www.cyberciti.biz/tips/linux-screen-command-howto.html

5
07.11.2011, 08:24
2 ответа

Не может быть сделан. От exec(3p) страница справочника:

Набор сигналов, который будет пойман изображением обработки вызовов, должен быть установлен на действие по умолчанию в новом образе процесса.

Необходимо было бы записать предварительную нагрузку ПОЭТОМУ, которая поднимет трубку обработчики сигналов перед запущенной программой.

4
27.01.2020, 20:40
  • 1
    Это верно? Реализация GNU nohup (1) сигнал вызовов (SIGHUP, SIG_IGN) сопровождаемый должностным лицом (3), и это может эффективно сделать команду выполнения неуязвимой для SIGHUP. –  Pteromys 07.11.2011, 06:05
  • 2
    SIG_IGN не "пойман". "За исключением SIGCHLD, набор сигналов, который будет проигнорирован (SIG_IGN) изображением обработки вызовов, должен быть установлен быть проигнорированным новым образом процесса". –  Ignacio Vazquez-Abrams 07.11.2011, 06:07
  • 3
    Спасибо. (Я должен был прочитать документ POSIX более тщательно.) Что касается общего объекта предварительной нагрузки, чтобы сделать это, я должен записать это сам? Я думаю такой, ТАК универсально, и подозреваемый там существуют известная библиотека, чтобы сделать это. –  Pteromys 07.11.2011, 06:15
  • 4
    Все, что я хотел бы, чтобы обработчик сигналов сделал, выполняют команду оболочки, таким образом, общего назначения ТАК было бы полезно. Но это кажется таким, ТАК не существует, и я должен записать это сам так или иначе. –  Pteromys 07.11.2011, 06:29
  • 5
    @Pteromys И причина, программа не может установить обработчик сигналов для другой программы, - то, что код выполнился бы в программе, где это находится. Если процесс звонит execve, весь его код и данные освобожден из памяти, таким образом, они не могут больше использоваться для обработчика сигналов. –  Gilles 'SO- stop being evil' 08.11.2011, 01:43

У Вас мог только быть он, игнорируют сигналы (SIG_IGN); Вы не смогли бы дать обработчику сигналов любого от оболочки (trap) или в рамках программы C (signal(2)). Когда должностное лицо вызывают, любой обработчик сигналов был бы заменен.

Пример:

:
trap "" 1 2
exec sleep 100000

Затем назовите программу, или в фоновом режиме или нос, и отправьте любому a SIGHUP или SIGINT к программе. Это проигнорировано. Помещение кода в прерывании заставляет сигнал быть сброшенным на должностном лице:

:
trap "echo signal caught" 1 2
exec sleep 10000

Это не распечатает "сигнал, пойманный" Вас, отправляют сигналы, но на самом деле завершит программу.

1
27.01.2020, 20:40

Теги

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