gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 01:02:41 25 4
gpt4 key购买 nike

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

最佳答案

这是我使用的,用于从带有作业控制的 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;
}

如果一个session有一个controlling terminal,那么前台只能有process group,tcget/setpgrp用于设置这个process group id。所以如果你的进程组Id不是前台进程组的进程组Id,那么你不在前台。

如 mouviciel 所指向的链接所述,如果 shell 具有作业控制,它就可以工作。然而,情况并非总是如此。例如,在使用 busybox 的嵌入式系统上,shell 可以配置为有或没有作业控制。

关于c++ - C/C++ 进程如何知道它是否在后台运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3940555/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com