이것은 간단한 질문이지만 관련된 내용을 찾을 수 없습니다.
프로그램은 현재 가상 터미널에서 표준 출력에 대한 독점권을 어떻게 얻습니까?
즉, 두 개의 작업을 실행할 때 하나의 작업만 표준 출력에 쓸 수 있습니다. (전체 화면 ncurses 설치 프로그램과 같습니다).
감사해요.
답변1
이 stty tostop
설정을 사용하면 커널이 SIGTTOU
터미널에 쓰기를 시도하는 백그라운드 프로세스로 전송됩니다. 그러나 프로세스는 신호를 무시할 수 있습니다.
또 다른 접근 방식은 애플리케이션을 사용되지 않는 가상 콘솔에 연결하는 것입니다. 이를 위해 새 사용자를 생성하고 해당 사용자만 터미널에 액세스할 수 있도록 한 다음 해당 사용자로 프로그램을 실행합니다.
편집하다
이것은 훨씬 쉽습니다. (실제로는) 다른 사용자가 필요하지 않습니다. 현재 사용하지 않는 터미널만 있으면 됩니다. 일반적으로 동일한 사용자의 다른 프로세스는 해당 터미널을 사용하지 않지만 를 수행하면 루트 프로세스를 제외한 모든 프로세스가 거기에 쓰는 것을 방지할 수 있습니다 chmod 000 /dev/tty
. 파일 설명자가 이미 열려 있고 하위 프로세스에 의해 상속되므로 실행 중인 셸과 향후 하위 프로세스에는 문제가 되지 않습니다.
이론적으로 동일한 사용자의 프로세스는 권한을 복원할 수 있지만 그렇게 하지 않습니다.