Upstart 和 isstty(STDOUT_FILENO)

Upstart 和 isstty(STDOUT_FILENO)

许多 Linux 程序使用istty确定 STDOUT 是否为终端。例如,ls如果重定向 ( istty == 0),将(默认情况下)抑制彩色输出。

运行 upstart 作业时,STDOUT 似乎未被重定向。该进程认为它正在写入/dev/pts/0

我的应用程序使用相同的演绎方法,在 upstart 下输出终端控制字符,这些字符最终出现在日志文件中/var/log/upstart/myapp.log

我可以配置 upstart 作业或者修改我的(C++)应用程序的源代码来解决这个问题吗?

(不仅仅是控制字符,而且诸如时间戳之类的内容也被从控制台输出中省略,但包含在日志文件中。)

答案1

让程序根据所连接的对象做出不同的行为是令人不悦的。例如,GNU 编码标准说

同样,请不要让命令行程序的行为取决于它作为标准输出或标准输入获得的输出设备类型。设备独立性是系统设计的一个重要原则;不要仅仅为了避免有人不时输入选项而妥协它。(使用终端时错误消息语法的变化是可以的,因为这是一个人们不依赖的次要问题。)

相反,考虑向您的程序添加命令行选项来改变行为,并在您的 upstart 作业中使用这些选项。

相关内容