Код: Выделить всё
int main(int argc, char **argv, char **envp)
{
signal(SIGQUIT, SIG_IGN);
int pid = fork();
// signal(SIGQUIT, SIG_IGN);
if (pid == 0)
{
signal(SIGQUIT, SIG_DFL);
// execve("/usr/bin/cat", argv, envp);
char buffer[100];
read(0, buffer, 50);
printf("buffer: %s\n", buffer);
return (0);
}
int status;
waitpid(pid, &status, 0);
printf("Status: %i\n", WIFSIGNALED(status));
if (WIFSIGNALED(status))
printf("Signal: %i\n", WTERMSIG(status));
#ifdef WCOREDUMP
if (WCOREDUMP(status))
printf("Core dumped!\n");
#endif
return (0);
}
[*] Ulimit -c Unlimited Настройка sigquit на sig_ign до и после подрыта (см. Пример кода) < /li>
Пробовал это с помощью Execve и «Cat» - то же поведение < /li>
< li> Запуск программы без fortk () ведет себя как ожидалось. br /> core_pattern говорит: | /WSL-Capture-Crash %t %e %p %s < /li>
Я использую WSL2 с Ubuntu, но уже пробовал программу на школьном компьютере. «Нормальный» Ubuntu и получить то же поведение < /li>
< /ul>
Может быть, это поведение также следует ожидать? Но если так - почему? Причина, по которой это даже проблема для меня, заключается в том, что моя оболочка должна обрабатывать сигналы, похожие на Bash, поэтому, в конце концов, я хотел бы, чтобы прерывание кошки ведет себя как прерывание кошки в Bash, если это вообще возможно. Если это не так, я действительно хочу знать, почему существует другое поведение от родительских и дочерних процессов. < /P>
Большое спасибо всем заранее! Это мой первый вопрос здесь, поэтому, пожалуйста, дайте мне также знать, если я смогу улучшить свой вопрос в будущем.
Подробнее здесь: https://stackoverflow.com/questions/794 ... wing-a-cor