Schau mal in /proc/$PID/fd. Dort sollten Sie alle vom Prozess geöffneten Dateideskriptoren haben, einschließlich des Skripts selbst. Nur 00
sollte ausreichen, um es wiederherzustellen.
Angenommen, das OP meinte wirklich aus dem RAM und nicht auf irgendwelche Weise , und unter der Annahme, dass der Prozess, in dem das Skript ausgeführt wurde, kein Kerndateilimit hat (was normalerweise die Standardeinstellung ist, 14
), dann müssen Sie an den Prozess anhängen und entweder das Core-Limit auf einen ausreichend großen Wert setzen, um das Prozessabbild einzuschließen und das ABRT-Signal zum Generieren der Core-Datei zu verwenden, oder ein Tool wie 22 die an einen Prozess angehängt werden und ein Kernabbild des Prozesses aus dem RAM generieren können.
- Installieren Sie
30
In einigen Shells mit demselben Besitz wie das laufende Skript oder Root-Besitz:
- Führe
43
aus um die Prozess-ID (PID) zu finden 55
Beachten Sie, dass dadurch die Prozessausführung gestoppt, aber nicht aus der Prozesstabelle entfernt wird.
- Geben Sie in gdb den Befehl
62
aus
gdb sollte mit etwas wie 72
antworten , unter der Annahme, dass die PID 15113 ist.
- Geben Sie in gdb den Befehl
89
aus
Ihr Skript wird weiter ausgeführt (wieder aufgenommen).
- Geben Sie in gdb den Befehl
96
aus - Führen Sie in der Shell
102
aus
Öffnen Sie die 116
in irgendeinem Editor. Ihr Skripttext sollte am Ende der Datei vor dem Umgebungsabschnitt stehen. Verwenden Sie den Editor, um die Abschnitte vor und nach dem Skript abzukratzen.
Testen Sie diese Lösung in einem anderen Skript, bevor Sie sie in Ihrem Gewinnskript verwenden. YMMV.
Die Sequenz sieht folgendermaßen aus:
[email protected]:~$ 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
[email protected]:~$