我如何收听正在运行的Linux进程?

时间:2012-01-21 03:17:11

标签: ruby linux process

我在我的服务器中运行rake任务作为一个单独的进程,并在STDOUT上打印跟踪该脚本的进度。

在SSH连接中,我的互联网连接重置。当我重新建立与服务器的连接时,我发现该进程仍在运行。我想听听它的STDOUT输出。我有进程ID。

我该怎么做?

4 个答案:

答案 0 :(得分:1)

将来,请考虑screen。这个精彩的小工具可以容纳大量的虚拟终端,让您轻松地从一个虚拟终端切换到下一个(甚至不使用鼠标),但最好的是,如果您断开连接,虚拟终端将继续运行,直到您重新连接并恢复屏幕会话。

开始一个屏幕会话:

screen

要故意分离屏幕会话,以便断开连接并使其保持运行状态:

C-a C-d

重新挂接分离的屏幕会话

screen -dr

还有很多东西,但这足以让你开始。

答案 1 :(得分:1)

retty应该做你想做的事。 http://pasky.or.cz/dev/retty/

答案 2 :(得分:0)

我没有一个Linux VM可以用来测试它,但你可以用gdb连接到进程,open(2)一个新的文件描述符用作标准输出,然后{{1}那到fd 1。

答案 3 :(得分:0)

strace  -p $pid_of_process_you_want_to_see_stdout_of 2>&1| sed -re 's%^write\(1,[[:blank:]](.*),[[:blank:]]*[0-9]+\)[[:blank:]]*=[[:blank:]]*[0-9]+%\1%g'

从这里被盗:

https://superuser.com/questions/473240/redirect-stdout-while-a-process-is-running-what-is-that-process-sending-to-d