用于重定向后台进程输出的 Unix 别名

用于重定向后台进程输出的 Unix 别名

我正在寻找一种方法来将后台进程的输出重定向到/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' &
  1. 将标准输出的剩余部分重定向至/tmp/stdout

    以下调用是等效的:

    dupx -n 0:/tmp/test $!
    dupx -o /tmp/test $! 
    dupx $! >>/tmp/test 
    

    请注意,最后一个例子还重新映射了进程的 stderr 和 stdin。但由于目标进程是在dupx正在运行的同一个 tty 上启动的,因此它们实际上没有改变。

  2. 将 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 $!
    

相关内容