Unter der Annahme, dass das OP wirklich RAM bedeutet und auf keine Weise möglich ist , und dass der Prozess, in dem das Skript ausgeführt wurde, keine Kerndateibeschränkung aufweist (dies ist normalerweise die Standardeinstellung cat /proc/PID/limits
), müssen Sie eine Verbindung zum Prozess herstellen und beides Setzen Sie die Kernbeschränkung auf einen Wert, der groß genug ist, um das Prozessabbild einzuschließen und das ABRT-Signal zum Generieren der Kerndatei zu verwenden, oder verwenden Sie ein Tool gdb
, das sich an einen Prozess anfügen lässt und ein Kernabbild des Prozesses aus dem RAM generiert.
- Installieren
gdb
In einer Shell mit demselben Besitz wie das ausgeführte Skript oder Root-Besitz:
- Tun
ps ax
, um die Prozess-ID (PID) zu finden
gdb -p PID
Beachten Sie, dass dadurch die Prozessausführung nicht fortgesetzt, aber nicht aus der Prozesstabelle entfernt wird.
- Geben Sie in gdb den Befehl aus
generate-core-file
gdb sollte mit so etwas wie antworten Saved corefile core.15113
, vorausgesetzt die PID ist 15113.
- Geben Sie in gdb den Befehl aus
detach
Ihr Skript wird weiterhin ausgeführt (fortgesetzt).
- Geben Sie in gdb den Befehl aus
quit
- In der Schale laufen
strings core.15113 > my_script.sh
Öffne den my_script.sh
in irgendeinem Editor. Ihr Skripttext sollte sich am Ende der Datei vor dem Umgebungsabschnitt befinden. Verwenden Sie den Editor, um die Abschnitte vor und nach dem Skript zu entfernen.
Testen Sie diese Lösung in einem anderen Skript, bevor Sie sie in Ihrem Gewinnskript verwenden. YMMV.
Die Sequenz sieht folgendermaßen aus:
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:~$