제어 터미널 이해

제어 터미널 이해

Java 프로그램을 시작했는데 유닉스 터미널에서 무한 루프가 발생했습니다(터미널 창을 가정하면).TW1) 두 번째 터미널 창을 열었습니다(예:TW2) ps -ef | grep java명령을 실행하면 다음과 같은 결과가 나타납니다.

501 32566 32444   0  2:26PM ttys000    7:43.89 /usr/bin/java com.test.Hello
501 32784 31676   0  2:34PM ttys003    0:00.00 grep java

1) 식별 ttys000여부TW1그리고 ttys003결정한다TW2?

2) 첫 번째 줄은 실행 중인 Java 프로세스를 나타냅니다. 와 연관되어 있습니다 ttys000. 그래서 기본적으로TW1내 Java 프로세스의 제어 터미널입니다. 맞아?

3) 명령을 실행하면 ps -ef열에 여러 프로세스가 표시됩니다. 이는 프로세스와 관련된 개방형 터미널이 없다는 것을 의미합니까???tty

답변1

1.)

예, 더 많은 내용이 있지만요. ttys000은(는) 에 있는 문자 장치이기도 합니다 /dev. 쓰기 tty그룹 권한이 있는 사용자(대부분의 사용자가 그렇습니다)는 문자를 장치에 파이프할 수 있으며 해당 터미널에 나타납니다. ttys*실제 텔레타이퍼는 아니지만 tty적절한 이름의 터미널 에뮬레이터로 에뮬레이션됩니다.

저는 Mac이 없으므로 다음 예에서는 Linux 명명 규칙을 사용하겠습니다.

사용자 A로 터미널 A를 열고 에뮬레이트된 tty를 찾습니다.

[userA@terminalA]$ tty
/dev/pts/0

사용자 B로 터미널 B를 열고 동일한 작업을 수행합니다.

[userB@terminalB]$ tty
/dev/pts/3

이제 터미널 A에서 터미널 B로 몇 개의 문자를 리디렉션합니다.

[userA@terminalA]$ echo Hi there > /dev/pts/3

터미널 B에 나타나는 것을 확인하세요.

[userB@terminalB]$ Hi there

나는 Mac에서 이러한 장치가 /dev/ttys*.

2.)

다소간. 그 ttys000자체는 단지 문자 장치일 뿐이며, Java 프로세스를 제어하는 ​​실제 엔터티는 터미널 에뮬레이터입니다. 통과제어내 말은 그것이 Java 프로세스의 상위 프로세스라는 것을 의미합니다. 상위 프로세스는 다른 프로세스보다 하위 프로세스와 더 쉽게 상호 작용할 수 있습니다.

또한 특정 예방 조치를 취하지 않으면( man nohup해당 예방 조치의 예 참조) 상위 프로세스가 종료되면 모든 하위 프로세스도 종료됩니다.

삼)

이것칼슨의 대답이미 설명했듯이 이는 ?터미널 독립적인 프로세스를 의미합니다.

단말 자체는 단순한 캐릭터 장치이기 때문에 프로세스가 단말 장치와 연관될 필요는 없다고 결론짓는 것은 어렵지 않다고 생각합니다.

결론

실제 터미널은 /dev/tty최신 *nix 운영 체제에서는 거의 사용되지 않습니다(부팅 프로세스 중에 널리 사용되지만). 하지만 이것이 실제 터미널을 사용할 수 없다는 의미는 아닙니다. Linux 컴퓨터에서(죄송합니다. Mac에서 어떻게 하는지 모르겠습니다) ++ Ctrl( 및 , , ...까지 )를 결합하면 다음과 같은 결과가 나옵니다.AltF1F2F3F7진짜단말기. 이러한 실제 터미널 중 하나는 그래픽 표시를 수행하는 데 사용됩니다.

그래픽 애플리케이션을 포함한 최신 *nix 운영 체제의 여러 프로세스는 이를 실행하는 스크립트가 추가 인수를 전달해야 하기 때문에 터미널 장치와 연결됩니다. 이 스크립트는 셸을 트리거하고 추가 매개변수를 전달하며 프로세스를 시작합니다. 이러한 스크립트는 종종 혼란을 야기합니다.

관련 정보