某些Linux错误消息未被重定向到包含2> x的文件

时间:2014-08-14 16:13:01

标签: linux io-redirection setrlimit

我有一个沙箱程序,它使用setrlimit()来限制在其控制下运行的另一个程序的输出文件大小,我这样运行:

sandbox -max 2048 /usr/bin/mono --debug myprogram.exe <p1 >r1 2>r2

“-max 2048”开关告诉沙箱将输出限制为最大2K字节。

如果“myprogram.exe”中发生异常,或者我故意从“myprogram.exe”内部向stderr写入内容,则会按预期显示在r2中。但是,当超出文件大小限制时,我收到以下错误消息:

File size limit exceeded (core dumped)

但不是按预期写入错误日志r2,而是在控制台上显示。谁能告诉我为什么会这样?有什么方法可以安排将此消息与其他所有内容一起写入r2吗?

2 个答案:

答案 0 :(得分:1)

它看起来像是shell报告的错误,而不是程序。 shell的stdout / stderr没有被重定向到任何地方。

答案 1 :(得分:0)

最有可能打开另一个文件描述符(比如3),将其分配给stderr(3>&2),然后重定向2>r2描述符3仍然是附在控制台上。因此,在3上打印内容将输出到控制台。您可以尝试在/proc/self/fd/列出所有打开的描述符,看看是否是这种情况。