OPが実際にはRAMからのものであり、可能な方法ではないことを想定し、スクリプトが実行されたプロセスのコアファイル制限がゼロであると仮定すると(通常はデフォルト設定ですcat /proc/PID/limits
)、プロセスに添付する必要がありますプロセスイメージを含めるのに十分な値にコア制限を設定し、ABRT信号を使用してコアファイルを生成するかgdb
、プロセスにアタッチしてRAMからプロセスのコアイメージを生成できるツールを使用します。
- インストール
gdb
実行中のスクリプトと同じ所有権またはルート所有権を持ついくつかのシェルで:
- やる
ps ax
プロセスID(PID)を見つけるために
gdb -p PID
これにより、プロセスの実行が継続されなくなりますが、プロセステーブルからは削除されません。
- gdbで、コマンドを発行します
generate-core-file
PDBが15113であるSaved corefile core.15113
と仮定すると、gdbはのようなもので応答するはずです。
- 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:~$