Linux 进程管理

Linux 进程管理

我在 ssh 控制台中启动了一个长时间运行的后台进程(dd使用/dev/urandom)。后来我不得不断开连接。当我再次登录时(这次是直接登录,没有使用 ssh),该进程似乎仍在运行。

我不确定发生了什么——我没有使用。当我稍后登录时,该进程最初disown没有列出,但过了一会儿,它恢复了高 CPU 百分比,正如我所料。所以我假设仍在运行。topdd

现在,我想查看进度。我用了,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 对其进行攻击,看看是否能得到任何东西。

相关内容