Можно ли изменить обработчики сигналов в другом процессе? - PullRequest
2 голосов
/ 14 августа 2010

Сегодня я узнал об инструменте nohup и задумался о его реализации.В частности, кажется, что должен быть способ сказать другому процессу или дочернему процессу игнорировать определенные сигналы.Это системный вызов или что-то в этом роде?

Ответы [ 3 ]

2 голосов
/ 14 августа 2010

nohup просто exec - это команда, которую вы даете после игнорирования сигнала HUP. Из исходного кода:

signal (SIGHUP, SIG_IGN);
/* skipping some stuff ... */
execvp (*cmd, cmd);

Я предполагаю, что это означает, что если указанная команда сделала что-то вроде:

signal (SIGHUP, SIG_DFL);  /* restore default HUP signal handler */

nohup не будет работать должным образом.

2 голосов
/ 14 августа 2010

Пусть источник будет с вами:)

Disclamer: фраза на самом деле не моя, а Marshall Kirk McKusick .

0 голосов
/ 14 августа 2010

Процесс сохраняет маску сигнала после вызова exec.

См. Источники для nohup здесь, например:

http://www.opensource.apple.com/source/shell_cmds/shell_cmds-118/nohup/nohup.c

Подробнее о вызове exec () см. Здесь:

http://www.opengroup.org/onlinepubs/009695399/functions/exec.html

А именно:

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

... Маска сигнала процесса (см. Sigprocmask ())

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...