Ubuntu — C ++ Linux Binary заканчивается сигналом SIGKILL — почему? (загружается в GDB)

Поэтому я запускаю свое приложение на C ++ в GDB, и когда оно выходит, я в основном получаю:

[Thread 0x7fff76e07700 (LWP 6170) exited]
[Thread 0x7fff76f08700 (LWP 6169) exited]
[Thread 0x7fff77009700 (LWP 6168) exited]
...
Program terminated with signal SIGKILL, Killed. The program no longer exists.
(gdb)

Я буквально понятия не имею, почему это происходит, почему я не могу сделать обратную трассировку, чтобы увидеть, как она вышла? У кого-нибудь есть идеи? Это никогда не должно заканчиваться 🙁

Спасибо!

15

Решение

Я буквально понятия не имею, почему это происходит,

Обычно это означает, что либо

  • какой-то другой процесс выполнил kill -9 <your-pid>, или же
  • убийца OOM ядра решил, что ваш процесс потребляет слишком много ресурсов, и прервал его (фактически ядро ​​выполнило kill -9 для этого). Вы должны посмотреть в /var/log/messages (/var/log/syslog в вариантах Ubuntu) для следов этого — ядро ​​обычно записывает сообщение, когда оно OOMs какой-то процесс.

почему я не могу сделать обратную трассировку, чтобы увидеть, как она вышла?

Потому что для того, чтобы увидеть обратный след, процесс должен существовать. Если он не существует, у него нет стека, и поэтому не может есть обратный след.

24

Другие решения

Возможно, что процесс столкнулся с процессором времени ulimit. Проверить с ulimit -a из среды, где процесс фактически запускается, если для параметра «Время ЦП» установлено любое значение, кроме «Неограниченное»

1

В моем случае произошел сбой (AV). Даже с подключенным GDB я не смог уловить это нарушение.
Надеюсь, поможет

0