我在我的进程中有一个方法,只有当进程不在后台时才应该运行。如何动态测试当前进程是否在后台?谢谢
发布于 2010-10-15 16:31:44
查看Unix常见问题解答:How can a process detect if it's running in the background?
一般的答案是:你不知道你是不是在后台运行。
但是您可以检查标准输入是否是终端:if(isatty(0)) { ... }
发布于 2010-10-15 16:50:26
下面是我使用的,用于从具有作业控制的shell启动的程序( shell的大部分,见下文):
/* We can read from stdin if :
* - we are in foreground
* - stdin is a pipe end
*/
static int validate_stdin(void) {
pid_t fg = tcgetpgrp(STDIN_FILENO);
int rc = 0;
if(fg == -1) {
debug_printf("Piped\n");
} else if (fg == getpgrp()) {
debug_printf("foreground\n");
} else {
debug_printf("background\n");
rc = -1;
}
return rc;
}
如果会话有控制终端,则前台只能有进程组,tcget/setpgrp用于设置该进程组id。因此,如果您的进程组Id不是前台进程组的进程组Id,则您不在前台。
如果shell有作业控制,它就能工作,正如mouviciel所说的链接。然而,情况并不总是如此。例如,在使用busybox的嵌入式系统上,shell可以配置为具有或不具有作业控制。
发布于 2010-10-15 16:23:36
尝试检查显示器的可用性。这里显示了xset命令How to check if Linux console screensaver has blanked screen的源代码
https://stackoverflow.com/questions/3940555
复制相似问题