Zakładając, że OP naprawdę znaczył z pamięci RAM, a nie w żaden możliwy sposób , i zakładając, że proces, w którym skrypt został wykonany, ma zerowy limit plików podstawowych (co zwykle jest ustawieniem domyślnym cat /proc/PID/limits
), wtedy musisz dołączyć do procesu i albo ustaw limit rdzenia na wystarczająco dużą wartość, aby uwzględnić obraz procesu i użyj sygnału ABRT do wygenerowania pliku rdzenia, lub użyj takiego narzędzia, gdb
które może dołączyć do procesu i wygenerować obraz rdzenia procesu z pamięci RAM.
- zainstalować
gdb
W niektórych powłokach z taką samą własnością jak uruchomiony skrypt lub własność root:
- Czy
ps ax
znaleźć identyfikator procesu (PID)
gdb -p PID
Zauważ, że zatrzyma to kontynuowanie wykonywania procesu, ale nie usunie go z tabeli procesów.
- W gdb wydaj polecenie
generate-core-file
gdb powinien odpowiedzieć na coś podobnego Saved corefile core.15113
, zakładając, że PID to 15113.
- W gdb wydaj polecenie
detach
Twój skrypt będzie kontynuował (wznawianie) działania.
- W gdb wydaj polecenie
quit
- W powłoce biegnij
strings core.15113 > my_script.sh
Otwórz my_script.sh
w jakimś edytorze. Tekst skryptu powinien znajdować się na końcu pliku przed sekcją środowiska. Użyj edytora, aby zeskrobać sekcje przed i po skrypcie.
Przetestuj to rozwiązanie na innym skrypcie, zanim użyjesz go w skrypcie nagrody. YMMV.
Sekwencja wygląda następująco:
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:~$