Bash를 실행하는 터미널에서 그래픽 애플리케이션을 실행하면 애플리케이션이 어떻게든 해당 Bash 세션에 연결됩니다. 예를 들어, 애플리케이션이 일부 텍스트를 덤프하면 이를 시작한 bash 세션에 표시됩니다. 또한 닫기 버튼을 사용하여 터미널을 닫으면 일부 응용 프로그램이 닫히지만 bash 세션을 종료하기 위해 종료 명령이나 CTRL+D를 사용하여 터미널을 닫으면 일부 응용 프로그램이 닫히지 않습니다.
해당 bash 세션에 연결된 bash 세션에서 그래픽 응용 프로그램을 어떻게 시작할 수 있습니까?
보너스 질문: 이 연결을 어떻게 확인하나요? 그리고 조작일까요?
답변1
애플리케이션은 bash와 터미널의 두 가지 방법으로 연결됩니다.
터미널에 대한 연결은 애플리케이션의 표준 스트림(stdin, stdout 및 stderr)을 터미널에 연결하는 것입니다. 일반적인 GUI 응용 프로그램은 stdin 또는 stdout을 사용하지 않지만 stderr에 오류 메시지를 발행할 수 있습니다.
셸과의 연결은 다음과 같이 응용 프로그램을 시작 foo &
하면nohup, disown, &의 차이점. 터미널을 닫으면 쉘은 이를 수신 SIGHUP
하여 해당 작업에 전파합니다. exit
셸에 입력 하면 선제적으로 작업이 거부됩니다(어느 정도 구성 가능).
disown
내장 에서 쉘의 연결을 끊을 수 있습니다 . 적어도 프로그램을 중단시킬 수 있는 일부 불쾌한 트릭(디버거 사용) 없이는 터미널 연결을 끊을 수 없습니다.
답변2
쉘은 이러한 프로그램을 하위 프로세스로 시작합니다. pstree를 실행하면 이러한 관계를 볼 수 있습니다. 당신이 그것을 조작했는지/어떻게 조작했는지는 모르겠습니다.