在Linux下,是否可以对其可执行文件已被删除的进程进行gcore?

在Linux下,是否可以对其可执行文件已被删除的进程进行gcore?,linux,debugging,gdb,gcore,Linux,Debugging,Gdb,Gcore,在CentOS 6.6上编程时,我删除了一个在屏幕会话中运行的可执行文件(哎呀,makeclean) 现在,我想gcore调试一些东西的过程。我已经重建了可执行文件,但是gcore不接受替换的文件。它知道原始文件已被删除,不会让我转储核心 # gcore 15659 core.YGsoec:4: Error in sourced command file: /home/dev/bin/daemon/destinyd (deleted): No such file or directory. gc

在CentOS 6.6上编程时,我删除了一个在屏幕会话中运行的可执行文件(哎呀,
makeclean

现在,我想
gcore
调试一些东西的过程。我已经重建了可执行文件,但是
gcore
不接受替换的文件。它知道原始文件已被删除,不会让我转储核心

# gcore 15659
core.YGsoec:4: Error in sourced command file:
/home/dev/bin/daemon/destinyd (deleted): No such file or directory.
gcore: failed to create core.15659

# ls -l /proc/15659/exe
lrwxrwxrwx. 1 root root 0 Mar 12 21:33 /proc/15659/exe -> /home/dev/bin/daemon/destinyd (deleted)

# ln -s /proc/15659/exe /home/dev/bin/daemon/destinyd
ln: creating symbolic link `/home/dev/bin/daemon/destinyd': File exists

# rm /proc/15659/exe
rm: remove symbolic link `/proc/15659/exe'? y
rm: cannot remove `/proc/15659/exe': Permission denied
有一个可选参数“executable”,看起来很有希望(好像我可以指定一个二进制文件来使用,它不是
/proc/15659/exe
),但这对我没有任何用处,因为没有任何这样的参数


有什么解决办法吗?或者我只需要重新启动进程(使用重新创建的可执行文件)并等待我跟踪的bug自我复制?

尽管有ls-l/proc/15659/exe的输出,但原始可执行文件实际上仍然可以通过该路径使用

因此,我不仅能够用一个简单的
cp
恢复原始文件(虽然这不足以恢复链接并使
gcore
工作),而且我还能够使用此路径作为可执行文件将GDB附加到进程:

# gdb -p 15659 /proc/15659/exe
然后运行“
生成核心文件
”命令,然后运行“
分离

然后,我可以根据需要自由地检查核心文件:

# gdb /proc/15659/exe core.15659
事实上,我已经忘记了GDB生成核心文件的能力,另外我还担心是否会将GDB实际附加到进程中,因为时间非常重要:在准确的时间生成核心文件以捕获该bug


但是,我的担心显然是毫无根据的,GDB能够为我生成一个可爱的
内核.15659

看起来很相似,但它是关于附加GDB(可以指定可执行路径)而不是gcore。而且,除此之外,没有一个答案与我的观察结果相符,即使是
/proc//exe
看起来也被删除了。我现在不能测试这个,但是iirc你可以
gdb-p/proc//exe
运行
生成核心文件
gdb命令。通过使用这个命令,我发现一旦文件被删除,内核将
exe
symlink链接到
/file/path/file name(已删除)
。将文件重命名为
文件名(已删除)
exe的
文件
输出从“断开的符号链接”更改为“符号链接”。即使在那时,我也无法成功运行gcore。@jPlatte-Heh这很有趣