Выскочка и истсты (STDOUT_FILENO)
Многие программы Linux используют istty
определить, является ли STDOUT терминалом или нет. Например, ls
будет (по умолчанию) подавлять цветной вывод, если он перенаправлен (istty == 0
).
При запуске заданий upstart STDOUT не перенаправляется. Процесс думает, что пишет /dev/pts/0
,
Мое приложение использует тот же дедуктивный подход и при запуске выдает управляющие символы терминала, которые попадают в файлы журнала в /var/log/upstart/myapp.log
,
Могу ли я настроить задание upstart или изменить исходный код моего приложения (C++) для решения этой проблемы?
(Это не только управляющие символы, но и такие вещи, как временные метки, не выводятся в вывод консоли, но включаются в файлы журналов.)
1 ответ
Ваша программа ведет себя по-разному, в зависимости от того, с чем она связана. Например, стандарты кодирования GNU гласят:
Точно так же, пожалуйста, не ставьте поведение программы командной строки в зависимости от типа устройства вывода, которое она получает как стандартный вывод или стандартный ввод. Независимость от устройства является важным принципом проектирования системы; не идите на компромисс с этим, просто чтобы спасти кого-то от ввода опции время от времени. (Изменение в синтаксисе сообщения об ошибке при использовании терминала в порядке, потому что это побочная проблема, от которой люди не зависят.)
Вместо этого рассмотрите возможность добавления параметров командной строки в свою программу, чтобы изменить поведение, и использовать их в своем задании upstart.