假设OP确实意味着从RAM而不是任何可能的方式,并假设执行脚本的进程没有核心文件限制(通常是默认设置cat /proc/PID/limits
),那么你需要附加到进程并且将核心限制设置为足够大的值以包括过程映像并使用ABRT信号生成核心文件,或使用诸如gdb
可附加到进程的工具并从RAM生成进程的核心映像。
- 安装
gdb
在某些与运行脚本或根所有权具有相同所有权的shell中:
- 不要
ps ax
找进程ID(PID)
gdb -p PID
请注意,这将阻止流程执行继续,但不会将其从流程表中删除。
- 在gdb中,发出命令
generate-core-file
Saved corefile core.15113
假设PID为15113,gdb应该响应类似的东西。
- 在gdb中,发出命令
detach
您的脚本将继续(恢复)运行。
- 在gdb中,发出命令
quit
- 在shell中,运行
strings core.15113 > my_script.sh
my_script.sh
在某些编辑器中打开。您的脚本文本应该位于环境部分之前的文件末尾。使用编辑器清除脚本之前和之后的部分。
在您的奖品脚本上使用之前,请在另一个脚本上测试此解决方案。因人而异。
序列如下所示:
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:~$