Linux进程pipe理

我在我的SSH控制台中开始了一个长时间运行的后台进程dd/dev/urandom )。 后来我不得不断开。 当我再次login(这次直接,没有SSH),这个过程似乎仍然运行。

我不知道发生了什么事 – 我没有使用disown 。 当我以后login的时候,这个过程一开始并没有列在top ,但是一段时间后,它恢复了很高的CPU百分比,正如我所料。 所以我认为dd仍在运行。

现在,我想看看进展情况。 我使用kill -USR1 <pid>但没有打印。 有什么办法再次获得输出?

redirect所有输出(标准输出,标准input,标准错误)可以取消关联一个subprocess与父进程。

你可以尝试用gdb连接到进程,键入'c'继续,当你从另一个连接到另一个时,监视那个控制台。

gdb / bin / dd pid

感谢kmarsh的回答和这个 线程,我能够redirect我丢失的输出(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我可以猫我的新文件:

 631820341060 bytes (632 GB) copied, 81603.1 s, 7.7 MB/s 

恐怕不是。 但下次使用屏幕 。 谷歌的教程或从这里开始。

你可以通过查看/proc/(pid of your dd/fd/1/proc/(pid)/fd/2来查看输出结果,然后用USR1打它,看看你是否得到了任何东西。