我在 ssh 控制台中启动了一个长时间运行的后台进程(dd
使用/dev/urandom
)。后来我不得不断开连接。当我再次登录时(这次是直接登录,没有使用 ssh),该进程似乎仍在运行。
我不确定发生了什么——我没有使用。当我稍后登录时,该进程最初disown
没有列出,但过了一会儿,它恢复了高 CPU 百分比,正如我所料。所以我假设仍在运行。top
dd
现在,我想查看进度。我用了,kill -USR1 <pid>
但没有打印任何内容。有没有办法重新获取输出?
答案1
重定向所有输出(stdout、stdin、stderr)可以分离子进程与父进程的关联。
您可以尝试使用 gdb 附加到该进程,键入“c”继续,并在从另一个控制台执行它时观察该控制台。
gdb /bin/dd进程号
答案2
谢谢kmarsh 的回答和这 线程我能够将丢失的输出(stderr)重定向到一个文件:
gdb /bin/dd 2616
(gdb) p creat("/root/dd.stderr",0600)
[Switching to Thread 0x7f651ece56e0 (LWP 2616)]
$1 = 3
(gdb) p dup2(3,2)
$2 = 2
(gdb) p close(3)
$3 = 0
(gdb) q
运行后kill -USR1 2616
我可以 cat 我的新文件:
631820341060 bytes (632 GB) copied, 81603.1 s, 7.7 MB/s
答案3
答案4
您可能能够通过查看/proc/(pid of your dd/fd/1
或来查看输出/proc/(pid)/fd/2
。 对其进行 Cat 处理,然后使用 USR1 对其进行攻击,看看是否能得到任何东西。