如何看看正在运行的Linux进程输出^

我的电脑上运行了几个Linux(Ubuntu 10.04)进程。 如果我启动其中一个,我可以在terminal上看到它的详细信息。 我有另一个进程,启动了十几个这样的进程,使他们在后台运行。 但是,我想观察这些进程之一的输出,看看输出是否仍然正常,没有错误信息。 我知道我可以将所有内容都发送到日志消息中,但是这只会占用太多的磁盘空间。 那么,有没有办法在Linux中使用它的进程ID“捕捉”正在运行的进程的输出? 谢谢!

使用重定向

yourprogram arg1 arg2 > yourprog.out 

或者甚至可能(重定向stderr&stdout并在后台运行)

 yourprogram arg1 arg2 > yourprog.out 2>&1 & 

在不同的终端,做

 tail -f yourprog.out 

使用-f选项, tail命令会注意到文件正在增长,并将显示其最新的行

但是我看不到便携式的方式后重定向。 也许screenbatchatcron可能会帮助你。 或者打开/proc/1234/fd/1

顺便说一句,我很惊讶,你没有足够的临时磁盘空间输出…

我喜欢在emacs下运行Mx shell ,并在那里运行我的程序。

您可以将gdb附加到正在运行的进程中,并且每当您想要查看输出时确保文件存在于重定向之前 ,将stdout / err或两者都重定向到某个日志文件:

 gdb连接PID
   (gdb)p dup2(open(“/ tmp / mylogfile-stdout”,0),1)
   (gdb)p dup2(打开(“/ tmp / mylogfile-stderr”,0),2)
   (gdb)分离
   (gdb)退出

当你想要他们回到沉默只是做:

 gdb连接PID
   (gdb)p dup2(open(“/ dev / null”,0),1)
   (gdb)p dup2(open(“/ dev / null”,0),2)
   (gdb)分离
   (gdb)退出

'detach'部分很重要,否则当gdb退出时,你将会终止你所连接的进程。 欲了解更多详情,请参阅此问题