在C中,检测程序在“后台模式”下调用的方法是什么?
我有一个程序想要以交互方式或在后台启动。
我怎样才能检测到我不应该从标准输入读取并以“已停止:tty 输入”状态结束?
我应该测试 stdin 是否已关闭?我怎样才能做到这一点 ?
编辑 :
isatty 似乎是个好主意,但是如果 stdin 是管道端而不是 tty 会发生什么?
Use the tcgetpgrp() http://www.opengroup.org/onlinepubs/9699919799/functions/tcgetpgrp.html控制终端的文件描述符上的函数(例如STDIN_FILENO
或 stdin 为 0)来检查当前前台进程组是否等于您自己的进程组(来自getpgrp() http://www.opengroup.org/onlinepubs/9699919799/functions/getpgrp.html)。然而,当您的程序在前台和后台之间移动时,前台进程组可能随时发生变化。例如,它可能会在您致电后立即更改tcgetpgrp()
在你测试它之前。因此,如果您打算据此采取任何行动,请记住这一点;这不是一个可靠的避免方法SIGTTIN
.
#include <unistd.h>
pid_t fg = tcgetpgrp(STDIN_FILENO);
if (fg == -1) {
/* stdin is not controlling terminal (e.g. file, pipe, etc.) */
} else if (fg == getpgrp()) {
/* foreground */
} else {
/* background */
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)