1

我有一个沙盒程序,它使用 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?

4

2 回答 2

1

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

于 2014-08-14T17:14:30.993 回答
0

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

于 2014-08-14T16:57:41.177 回答