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