Подтвердить что ты не робот

Можно ли сигнализировать обработчику, чтобы выжить после "exec"?

Я написал обработчик сигнала для процесса, а fork() после этого обработчик сигнала будет применен как к родительскому, так и к дочернему процессам. Если я заменил дочерний процесс на "exec" , обработчик сигнала больше не будет.

Я знаю, что это происходит, потому что вызов "exec" будет перезаписывать адресное пространство дочернего процесса с его собственным. Я просто хочу знать, есть ли способ заставить обработчик сигналов работать даже после вызова "exec" ?

4b9b3361

Ответ 1

Нет. На страницах man:

execve() не возвращается с успехом, а текст, данные, bss и стек вызывающего процесса перезаписываются загружаемой программой. Вызванная программа наследует PID вызывающего процесса и любые дескрипторы открытых файлов, которые не установлены для закрытия на exec. Сигналы, ожидающие вызова вызывающего процесса, очищаются. Любые сигналы, установленные для вызова вызывающим процессом, являются reset по умолчанию. Сигнал SIGCHLD (если установлен в SIG_IGN) может быть или не быть reset для SIG_DFL.

Фактически, если обработчик сигналов все еще был активен после замены кода каким-то совсем другим кодом, вы могли ожидать всевозможные хаос при возникновении сигнала. В конце концов, обработчик сигналов - это просто адрес для вызова, когда что-то происходит (дисконтирование SIG_IGN и SIG_DFL пока). Кто знает, какая часть кода будет на этом адресе при замене всего текстового сегмента?