Дамп памяти процесса при выходе из Linux

Я хочу сбрасывать память процесса при его выходе. Все решения, которые я видел с использованием gcore, gdb или даже procdump для linux, выгружают ядро ​​в середине выполнения, а не точно, когда оно завершается

Procdump для Windows имеет для этого очень элегантное решение, то есть -t позволит procdump создавать дамп при выходе из процесса.

Я наткнулся на ulimit -c unlimited, но это снова будет генерировать дампы только для неизящных выходов.

Процесс, для которого я хочу получить дамп, может быть любым процессом, а не моим приложением.


person Karan Jit Singh    schedule 08.03.2018    source источник
comment
Но когда процесс завершается, сбрасывать нечего, потому что процесс больше не существует. Что вы подразумеваете под выходом из процесса?   -  person ks1322    schedule 08.03.2018
comment
установите обработчик сигналов для вашего приложения, когда он собирается выйти, просто дамп с использованием кода C, следующая ссылка делает это в C stackoverflow.com/questions/3342335/dump-memory-of-a-process   -  person Prabhakar Lad    schedule 08.03.2018
comment
@ ks1322, когда процесс завершается, я имею в виду, когда он вот-вот завершится. Именно то, что делает опция procdump -t для Windows.   -  person Karan Jit Singh    schedule 08.03.2018
comment
@PrabhakarLad, мне нужно сбросить память не моего процесса. Это может быть любой процесс, мне просто нужно иметь идентификатор процесса и сбрасывать память прямо перед завершением процесса.   -  person Karan Jit Singh    schedule 08.03.2018
comment
напишите приложение c (установите обработчик сигналов SIGCHILD), разветвите процесс, за которым вы хотите следить, и сошлитесь на ссылку в моем предыдущем посте, чтобы сбросить память.   -  person Prabhakar Lad    schedule 08.03.2018


Ответы (1)


Если вы хотите имитировать это поведение с помощью gdb:

Procdump для Windows имеет для этого очень элегантное решение, то есть -t позволит procdump создавать дамп при выходе из процесса.

Сначала вы создаете файл mycommand.txt:

b exit
r
generate-core-file ./core.1
q

Затем вы начинаете свою программу с:

 gdb --command mycommand.txt yourprogram 

у вас будет файл с именем core.1 в вашем рабочем каталоге. Проверить с:

gdb yourprogram core.1
person Jens Harms    schedule 08.03.2018
comment
Командная строка gdb должна быть gdb -x mycommand.txt yourprogram. - person ks1322; 09.03.2018