如何使用tcsetpgrp函数

时间:2013-11-29 01:15:35

标签: c

这是使用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

前景

出口

最后,终端自动退出,有人知道原因吗?

1 个答案:

答案 0 :(得分:0)

如果控制终端的进程组退出,则shell或终端可能会决定会话已结束并将其终止。我用ksh93和bash在gnome-terminal上尝试了你的程序,它没有退出。