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

プログラムではなく、シェルによって報告されるエラーのようです。シェルの 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 に答える