С++ Linux Binary завершена сигналом SIGKILL - почему? (загружается в GDB)
Итак, я запускаю свое приложение на С++ в 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)
Я буквально понятия не имею, почему это происходит, почему я не могу сделать обратную линию, чтобы увидеть, как она вышла? У кого-нибудь есть идеи? Это никогда не должно заканчиваться: (
Спасибо!
Ответы
Ответ 1
Я буквально понятия не имею, почему это происходит,
Это обычно означает, что либо
- какой-либо другой процесс выполнил
kill -9 <your-pid>
или
- Ядро OOM killer решил, что ваш процесс потребляет слишком много ресурсов и завершает его (фактически, ядро выполнило
kill -9
для него). Вы должны посмотреть в /var/log/messages
(/var/log/syslog
на вариантах Ubuntu) для следов этого - ядро обычно регистрирует сообщение, когда оно выполняет OOM какой-то процесс.
почему я не могу сделать обратную линию, чтобы увидеть, как она вышла?
Потому что для того, чтобы увидеть обратную линию, процесс должен существовать. Если он не существует, он не имеет стека и поэтому не может иметь обратную трассировку.
Ответ 2
Возможно, что процесс перешел в процессорное время ulimit. Обратитесь к ulimit -a из среды, где процесс фактически запущен, если для параметра "время процессора" установлено значение "неограниченное"
Ответ 3
В моем случае произошел сбой (AV). Даже при подключении GDB я не мог поймать это нарушение.
Надеюсь, что это поможет.