"새 세션에 제어 터미널이 없습니다"는 무엇을 의미합니까?

"새 세션에 제어 터미널이 없습니다"는 무엇을 의미합니까?

이 참조새 세션 생성과 관련하여 다음과 같이 말합니다. 호출 프로세스는 새 세션의 리더이고 새 프로세스 그룹의 프로세스 그룹 리더이며제어 터미널 없음

그래서 나는 아래 코드가 아무것도 인쇄하지 않고 printf가 오류(표준 출력에 바인딩된 터미널이 없다는 것에 대한)를 반환할 것으로 예상했지만 그렇지 않습니다. 프로그램을 실행하는 터미널에 인쇄됩니다.

나한테 무슨 문제라도 있는 걸까?

#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>

int main(void)
{
    if (!fork())
    {
        if (setsid() == -1) // create new session by a child process
            return -1;
        printf("New sesions %d is created\n", getsid(0)); 
    }
    else
        wait(NULL);

    return 0;
}

답변1

내 생각에 이것은 자식 프로세스가 여전히 파일 설명자를 상속하고 부모 프로세스를 stdout가리키기 때문에 자식 프로세스도 가리키게 되고 커널이 어디로 보낼지 아는 방법이므로 제어와는 아무런 관련이 없기 때문이라고 생각합니다. 여기 터미널이 있습니다. 제가 올바르게 이해했다면/dev/pts/1234/dev/pts/1234stdout

관련 정보