SIGQUIT в детском процессе не производит основной дамп, несмотря на статус, показывающий основной дампLinux

Ответить Пред. темаСлед. тема
Anonymous
 SIGQUIT в детском процессе не производит основной дамп, несмотря на статус, показывающий основной дамп

Сообщение Anonymous »

Такое поведение сводило меня с ума в последнее время, хотя, вероятно, есть разумное объяснение, возможно, даже исправление. школа и изучала сигнал сигквита. Я нашел что-то странное: когда я пишу «обычную» C-программу и даю ей Sigquit, используя Ctrl-, она будет Sigquit и отправит сообщение с надписью «Выйти (ядро сброшено)». Это то же самое, что, например, ввод «кошки» в Bash, а затем Ctrl-. SIG_IGN и ребенок в SIG_DFL, ребенок получит сигнал SIGQUIT, и процесс прекращается, но вышеупомянутое сообщение об ошибке не показывает. Я также использовал Waitpid, чтобы поймать статус и проанализировать его с помощью Wtermsig, и он говорит, что это 3, поэтому он был прекращен Sigquit. Я приложил пример кода, чтобы продемонстрировать мою проблему, так как код оболочки, которую я написал до сих пор, огромный. />

Код: Выделить всё

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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • SIGQUIT в детском процессе не производит основной дамп, несмотря на статус, показывающий основной дамп
    Anonymous » » в форуме Linux
    0 Ответы
    25 Просмотры
    Последнее сообщение Anonymous
  • Hook ssl_write на детском процессе через Frida
    Anonymous » » в форуме Javascript
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • FCLOSE в детском процессе влияет на операции с исходным процессом, когда нет Fflush до Flush Fork [Duplicate]
    Anonymous » » в форуме Linux
    0 Ответы
    27 Просмотры
    Последнее сообщение Anonymous
  • Убийство программы с использованием sigquit при использовании readline
    Anonymous » » в форуме Linux
    0 Ответы
    69 Просмотры
    Последнее сообщение Anonymous
  • Грациозная остановка Nginx/PHP FPM (SIGQUIT): не так изящно
    Anonymous » » в форуме Php
    0 Ответы
    25 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Linux»