내 터미널의 파일 설명자는 무엇입니까?

내 터미널의 파일 설명자는 무엇입니까?

tcsetgrp백그라운드 프로세스를 포그라운드 프로세스로 만들려면 함수를 사용해야 하는데 인수는 tcsetgrp터미널과 연결된 파일 설명자입니다. file descriptor내 터미널 또는 해당 int 값은 무엇입니까?

편집하다

아래 의견을 바탕으로 내 프로그램의 일부를 소개합니다.

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<signal.h>
void sig_handler(int sig){

    printf("The grp get signal is  %d\n",tcgetpgrp(0));
}
int main(){

    printf("The controllling terminal is %d\n",tcgetpgrp(0));
    pid_t pid=fork();
    if(pid>0){
        signal(SIGINT,sig_handler);
        setpgid(pid,pid);
        tcsetpgrp(0,getpgid(pid));
        //tcsetpgrp(1,getpgid(pid));
        printf("Wait is over on %d",wait(NULL));
        tcsetpgrp(0,getpgid(getpid()));
        //tcsetpgrp(1,getpgid(getpid()));
        printf("The parent got control\n");
        while(1)
            //sleep(1);
            printf("Hello\n");

        return 0;
    }
    else{
        printf("The controllling terminal is %d\n",tcgetpgrp(0));
        printf("The controllling terminal is %d\n",tcgetpgrp(1));
        execlp("cat","cat",NULL);
    }
    return 0;

}

여기에서는 현재 cat 프로그램이 전경이고 모든 것이 잘 작동하고 있습니다. 입력 콘솔에서 데이터를 읽고 이를 출력 콘솔로 보낼 수 있습니다. 그러나 내가 누르면 포그라운드 프로세스(cat)가 종료되지만 나중에 언급했음에도 *cntrl-c*부모님은 터미널을 제어할 수 없습니다 . 내 쉘 프롬프트가 나타나고 상위 프로세스가 백그라운드 프로세스로 유지됩니다.tcsetpgrp(0,getpid())wait()

답변1

프로그램에서 파일 설명자 0(stdin), 1(stdout) 및 2(stderr)는 프로그램을 호출하는 명령에서 리디렉션이나 파이프를 사용하지 않는 한 기본적으로 터미널과 연결됩니다.

답변2

파일 설명자를 얻는 방법에는 여러 가지가 있습니다.

  • 다음과 같이 실행할 수 있습니다. lsof -p $$ | grep /dev/pts또는
  • ls /proc/$$/fd

파일 설명자 0(stdin), 1(stdout) 및 2(stderr)는 모든 프로그램에서 사용되는 표준 FD입니다.

관련 정보