![用于重定向后台进程输出的 Unix 别名](https://linux22.com/image/1583257/%E7%94%A8%E4%BA%8E%E9%87%8D%E5%AE%9A%E5%90%91%E5%90%8E%E5%8F%B0%E8%BF%9B%E7%A8%8B%E8%BE%93%E5%87%BA%E7%9A%84%20Unix%20%E5%88%AB%E5%90%8D.png)
我正在寻找一种方法来将后台进程的输出重定向到/dev/null
其他文件。
$ python ./spam_console.py &
$ [start doing something in the foreground
$ cat test.py
$ [whole console is spammed with output of python program]
我正在寻找一种方法,使用简单的命令行实用程序将这些进程的 stdout、stderr 转储到某个文件中。
$ dump_to -p 1526 --out /dev/null
有一个很好的解决方案https://superuser.com/a/732504使用 gdb,但我正在寻找一种方法将所有这些包装在一个简单的别名/c 程序后面,以便可以在命令行上轻松使用。我正在寻找以非交互式(又称编程式)方式访问 gdb 的帮助,以执行链接文章中的命令。
答案1
在对 hackernews 进行广泛谷歌搜索后,我找到了答案。dupx
正是我想要的。
Dupx 是一个简单的实用程序,用于重新映射已运行程序的文件。像 Bash 这样的 Shell 允许在程序启动时使用
>
,<
- 之类的语法轻松进行输入/输出/错误重定向,例如:echo 'redirect this text' > /tmp/stdout
将把 echo 的输出重定向到
/tmp/stdout
。但是,标准 shell 不提供对已启动进程的输出(或输入,或错误)进行重新映射(重定向)的功能。Dupx 试图解决这个问题 [...]
[...]
示例用法
请注意,这些示例使用 bash 语法。首先,我们启动一个休眠的后台 bash 作业,然后在标准输出上打印一些内容:
bash -c 'sleep 1m && echo rise and shine' &
将标准输出的剩余部分重定向至
/tmp/stdout
以下调用是等效的:
dupx -n 0:/tmp/test $! dupx -o /tmp/test $! dupx $! >>/tmp/test
请注意,最后一个例子还重新映射了进程的 stderr 和 stdin。但由于目标进程是在
dupx
正在运行的同一个 tty 上启动的,因此它们实际上没有改变。将 stdout 和 stderr 的剩余部分重定向到不同的文件,从中读取 stdin 的剩余部分
/dev/null
:以下调用是等效的:
dupx -o /tmp/stdout -e /tmp/stderr -i /dev/null $! dupx -n 0:/tmp/stdout 1:/dev/null 2:/tmp/stderr $! dupx >/tmp/stdout 2>/tmp/stderr </dev/null $!