我有一个进程运行很长时间。
我不小心删除了进程的二进制可执行文件。
由于该进程仍在运行并且没有受到影响,因此其他地方必须有原始二进制文件......
我怎样才能恢复它?(我用的是CentOS 7,运行过程是用C++写的)
它只能在内存中并且不可恢复,在这种情况下,您必须尝试使用这些文件系统恢复工具之一(或从内存中)从文件系统中恢复它。然而!
$ cat hamlet.c
#include <unistd.h>
int main(void) { while (1) { sleep(9999); } }
$ gcc -o hamlet hamlet.c
$ md5sum hamlet
30558ea86c0eb864e25f5411f2480129 hamlet
$ ./hamlet &
[1] 2137
$ rm hamlet
$ cat /proc/2137/exe > newhamlet
$ md5sum newhamlet
30558ea86c0eb864e25f5411f2480129 newhamlet
$
使用解释程序,获取脚本文件可能介于棘手和不可能之间,如/proc/$$/exe
will 指向perl
或其他内容,并且输入文件可能已经关闭:
$ echo sleep 9999 > x
$ perl x &
[1] 16439
$ rm x
$ readlink /proc/16439/exe
/usr/bin/perl
$ ls /proc/16439/fd
0 1 2
只有标准的文件描述符是打开的,所以x
已经消失了(虽然可能在文件系统上仍然存在一段时间,谁知道解释器在内存中有什么)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句