Podívejte se na /proc/$PID/fd. Zde byste měli mít všechny deskriptory souborů otevřené procesem, včetně samotného skriptu. Stačí 07
by mělo stačit k jeho obnovení.
Za předpokladu, že OP skutečně znamenalo z RAM a nikoli jakýmkoli možným způsobem a za předpokladu, že proces, ve kterém byl skript spuštěn, má nulový limit počtu souborů jádra (což je obvykle výchozí nastavení 11
), pak se musíte připojit k procesu a buď nastavit limit jádra na dostatečně velkou hodnotu, aby zahrnoval obraz procesu a použít signál ABRT k vygenerování souboru jádra, nebo použít nástroj jako 29 který se může připojit k procesu a generovat základní obraz procesu z paměti RAM.
- Nainstalujte
38
V nějakém prostředí se stejným vlastnictvím jako spuštěný skript nebo vlastnictví root:
- Proveďte
40
najít ID procesu (PID) 52
Všimněte si, že to zastaví provádění procesu, ale neodstraní jej z tabulky procesů.
- V gdb zadejte příkaz
69
gdb by měl odpovědět něčím jako 79
, za předpokladu, že PID je 15113.
- V gdb zadejte příkaz
86
Váš skript bude pokračovat (obnoví se) v běhu.
- V gdb zadejte příkaz
94
- V prostředí shell spusťte
109
Otevřete 113
v nějakém editoru. Text vašeho skriptu by měl být na konci souboru před sekcí prostředí. Pomocí editoru seškrábněte části před a za skriptem.
Otestujte toto řešení na jiném skriptu, než jej použijete ve svém skriptu ceny. YMMV.
Sekvence vypadá takto:
[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]:~$