首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C/C++进程如何知道它是否在后台运行?

C/C++进程如何知道它是否在后台运行?
EN

Stack Overflow用户
提问于 2010-10-15 16:18:41
回答 4查看 3.1K关注 0票数 4

我在我的进程中有一个方法,只有当进程不在后台时才应该运行。如何动态测试当前进程是否在后台?谢谢

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-10-15 16:31:44

查看Unix常见问题解答:How can a process detect if it's running in the background?

一般的答案是:你不知道你是不是在后台运行。

但是您可以检查标准输入是否是终端:if(isatty(0)) { ... }

票数 3
EN

Stack Overflow用户

发布于 2010-10-15 16:50:26

下面是我使用的,用于从具有作业控制的shell启动的程序( shell的大部分,见下文):

代码语言:javascript
运行
复制
/* 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可以配置为具有或不具有作业控制。

票数 5
EN

Stack Overflow用户

发布于 2010-10-15 16:23:36

尝试检查显示器的可用性。这里显示了xset命令How to check if Linux console screensaver has blanked screen的源代码

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3940555

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档