这是使用tcsetpgrp函数的一个简单示例:
#include <stdio.h>
#include <unistd.h>
#include <signal.h>
static void judge(void){
pid_t pid;
pid = tcgetpgrp(STDIN_FILENO);
if(pid == -1){
perror("tcgetpgrp");
return;
}else if(pid == getpgrp()){
printf("foreground\n");
}else{
printf("background\n");
}
}
int main(void){
signal(SIGTTOU,SIG_IGN);
judge();
int result;
result = tcsetpgrp(STDIN_FILENO,getpgrp());
if(result == -1){
perror("tcsetpgrp");
return -1;
}
judge();
return 0;
}
我将在后台运行它,作为我的预期,输出如:
todd911 @ virtual-machine:./ a.out&amp;
[1] 15894
todd911 @ virtual-machine:〜$ background
前景
但事实上,它的行为如下:
todd911 @ virtual-machine:./ a.out&amp;
[1] 15894
todd911 @ virtual-machine:〜$ background
前景
出口
最后,终端自动退出,有人知道原因吗?
答案 0 :(得分:0)
如果控制终端的进程组退出,则shell或终端可能会决定会话已结束并将其终止。我用ksh93和bash在gnome-terminal上尝试了你的程序,它没有退出。