如何查看当前运行的Linux进程输出^

时间:2013-05-26 20:03:46

标签: linux process terminal output verbose

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

2 个答案:

答案 0 :(得分:4)

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

gdb attach PID
  (gdb) p dup2(open("/tmp/mylogfile-stdout", 0), 1)
  (gdb) p dup2(open("/tmp/mylogfile-stderr", 0), 2)
  (gdb) detach
  (gdb) quit

当你希望他们回到沉默时,只需这样做:

gdb attach PID
  (gdb) p dup2(open("/dev/null", 0), 1)
  (gdb) p dup2(open("/dev/null", 0), 2)
  (gdb) detach
  (gdb) quit

'detach'部分很重要,否则当gdb退出时你会杀死你附加的进程。有关详细信息,请参阅this question

答案 1 :(得分:1)

使用重定向,如

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下运行M-x shell,并在那里运行我的程序。