2013-11-29 78 views
2

這是一個簡單的例子來使用tcsetpgrp功能:如何使用tcsetgprp功能

#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 @虛-machine:./ a.out的&

[1] 15894

todd911 @虛擬機:〜$背景

前景

但事實上,它像:

todd911 @虛擬機:./ a.out的&

[1] 15894

todd911 @虛擬機:〜 $背景

前景

退出

最後,終端自動退出,有人知道原因嗎?

+0

它在主 – niko

+0

結束時返回0,問題是我的終端自動退出,就像我在shell中執行exit命令一樣。 – TODD911

+0

您可能會通過在其背後操縱fg/bg進程組來混淆您的shell。 – ninjalj

回答

0

如果控制終端的進程組退出,那麼shell或終端將決定會話結束並將其關閉。我用ksh93和bash在gnome-terminal上試了你的程序,但沒有退出。