我有一个沙箱程序,它使用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吗?
答案 0 :(得分:1)
它看起来像是shell报告的错误,而不是程序。 shell的stdout / stderr没有被重定向到任何地方。
答案 1 :(得分:0)
最有可能打开另一个文件描述符(比如3
),将其分配给stderr(3>&2
),然后重定向2>r2
描述符3
仍然是附在控制台上。因此,在3
上打印内容将输出到控制台。您可以尝试在/proc/self/fd/
列出所有打开的描述符,看看是否是这种情况。