Якщо припустити, що ОП дійсно означало оперативну пам’ять, а не будь-яким можливим способом , і якщо припустити, що процес, в якому виконується скрипт, має нульовий ліміт файлу ядра (що, як правило, є типовим параметром, cat /proc/PID/limits
), то вам потрібно приєднатися до процесу і встановити обмеження ядра на достатньо велике значення, щоб включити зображення процесу та використання сигналу ABRT для створення основного файлу, або використовувати такий інструмент, gdb
який може приєднати до процесу та генерувати основне зображення процесу з ОЗУ.
- Встановити
gdb
У деякій оболонці з тим самим правом власності, як і запущений сценарій або root власність:
- Зробити,
ps ax
щоб знайти ідентифікатор процесу (PID)
gdb -p PID
Зауважте, що це зупинить виконання процесу, але не видалить його з таблиці процесів.
- У gdb видайте команду
generate-core-file
gdb має відповісти на щось подібне Saved corefile core.15113
, припускаючи, що PID - це 15113.
- У gdb видайте команду
detach
Ваш сценарій буде продовжуватись (відновитись).
- У gdb видайте команду
quit
- В оболонці бігайте
strings core.15113 > my_script.sh
Відкрийте my_script.sh
редактор. Текст сценарію має бути в кінці файлу перед розділом середовища. Використовуйте редактор, щоб викреслити розділи до і після сценарію.
Випробуйте це рішення на іншому сценарії, перш ніж використовувати його у своєму призовому сценарії. YMMV.
Послідовність виглядає приблизно так:
yba@tavas:~$ gdb -p 15113
GNU gdb (GDB) 7.4.1-debian
Copyright (C) 2012 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Attaching to process 15113
Reading symbols from /bin/bash...(no debugging symbols found)...done.
Reading symbols from /lib/x86_64-linux-gnu/libtinfo.so.5...(no debugging symbols found)...done.
Loaded symbols for /lib/x86_64-linux-gnu/libtinfo.so.5
Reading symbols from /lib/x86_64-linux-gnu/libdl.so.2...(no debugging symbols found)...done.
Loaded symbols for /lib/x86_64-linux-gnu/libdl.so.2
Reading symbols from /lib/x86_64-linux-gnu/libc.so.6...(no debugging symbols found)...done.
Loaded symbols for /lib/x86_64-linux-gnu/libc.so.6
Reading symbols from /lib64/ld-linux-x86-64.so.2...(no debugging symbols found)...done.
Loaded symbols for /lib64/ld-linux-x86-64.so.2
0x00007feaf4b4c7be in waitpid () from /lib/x86_64-linux-gnu/libc.so.6
(gdb) generate-core-file
Saved corefile core.15113
(gdb) detach
Detaching from program: /bin/bash, process 15113
(gdb) quit
yba@tavas:~$