我的电脑上运行了几个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
命令会注意到文件正在增长,并将显示其最新的行
但是我看不到便携式的方式后重定向。 也许screen
, batch
, at
, cron
可能会帮助你。 或者打开/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退出时,你将会终止你所连接的进程。 欲了解更多详情,请参阅此问题