Некоторые сообщения об ошибках Linux не перенаправляются в файл с 2>x
У меня есть песочница, которая использует setrlimit(), чтобы ограничить размер выходного файла другой программы, запущенной под его контролем, которую я запускаю так:
sandbox -max 2048 /usr/bin/mono --debug myprogram.exe <p1 >r1 2>r2
Переключатель "-max 2048" указывает песочнице ограничивать вывод максимум 2K байтами.
Если внутри "myprogram.exe" возникает исключение или я специально пишу что-то в stderr из "myprogram.exe", оно отображается в r2, как и ожидалось. Тем не менее, когда предел размера файла превышен, я получаю это сообщение об ошибке:
File size limit exceeded (core dumped)
но вместо записи в журнал ошибок r2, как и ожидалось, он выходит на консоль. Может кто-нибудь сказать мне, почему это происходит? Можно ли как-то организовать это сообщение для записи в r2 вместе со всем остальным?
2 ответа
Это похоже на ошибку, которая будет сообщена оболочкой, а не программой. Stdout/stderr оболочки никуда не перенаправляются.
Скорее всего, это открыть другой дескриптор файла (скажем, 3
), назначьте его на stderr (3>&2
), а затем, хотя вы перенаправили 2>r2
дескриптор 3
все еще прикреплен к консоли. Таким образом, печатая что-то на 3
выведет на консоль. Вы можете попробовать перечислить все открытые дескрипторы на /proc/self/fd/
чтобы увидеть, если это так.