X 응용 프로그램이 ps 결과에 TTY로 물음표를 표시하는 이유는 무엇입니까?

X 응용 프로그램이 ps 결과에 TTY로 물음표를 표시하는 이유는 무엇입니까?
$ ps -ef | head -n 1 && ps -ef | grep calc
UID          PID    PPID  C STIME TTY          TIME CMD
user1     524014    5382  0 10:21 ?        00:00:01 gnome-calculator
user1     532125  510665  0 10:36 pts/4    00:00:00 grep calc

나는 데몬에만 TTY가 있을 것이라고 생각했지만 ?Gnome Calculator는 데몬이 아닌 것 같습니다. 내 Gnome 세션에서 사용하는 TTY인 TTY2에서 실행되고 있다는 것을 알고 있습니다. 그렇다면 TTY 열에 ps결과가 표시되는 이유 는 무엇입니까??

[편집하다]

Gnome Calculator는 그래픽 쉘(Gnome Shell)을 통해 실행되기 때문에 TTY에 직접 연결되지 않는 것 같습니다. 프로세스 트리를 살펴보면 TTY2에 프로세스가 연결될 것이라고 생각했지만 그렇지 않습니다.

$ ps -f | head -n 1 && ps -ef | grep calc
UID          PID    PPID  C STIME TTY          TIME CMD
user1     524014    5382  0 10:21 ?        00:00:01 gnome-calculator
user1     578611  552619  0 11:58 pts/5    00:00:00 grep calc

$ ps -f -p 5382
UID          PID    PPID  C STIME TTY          TIME CMD
user1       5382    5131  4 juin10 ?       00:42:26 /usr/bin/gnome-shell

$ ps -f -p 5131
UID          PID    PPID  C STIME TTY          TIME CMD
user1       5131       1  0 juin10 ?       00:00:00 /lib/systemd/systemd --user

$ echo $DISPLAY 
:1

체인의 TTY2에 연결된 프로세스가 없습니다. 그러나 분명히 Gnome 계산기는 현재 TTY2에 표시됩니다. 특정 프로세스가 현재 어떤 TTY에 나타나는지 알아내는 명령이 있습니까? (혹은 어느 것에서 $DISPLAY)?

답변1

ps는 tty에 즉시 연결되지 않은 스레드에 대해 물음표를 표시합니다. (프로세스를 제어할 수 있는 터미널)

이는 확실히 커널 스레드와 기타 데몬의 경우입니다.

그러나 이는 X 클라이언트의 경우에도 반드시 필요합니다.

표준 tty에서 직접 gnome-calculator를 시작하셨습니까? 당연히 아니지! tty를 찾아 그 아래에 Ctrl-C를 입력하여 종료할 수 있습니까? 다시는 작동하지 않습니다!
물론 그래픽 인터페이스, 즉 논리적으로 일부 X 클라이언트에서 시작합니다. => tty가 첨부되지 않았습니다.

그러나 startx를 사용하여 tty에서 X 서버를 시작하면 X 서버 자체가 실제로 tty에 연결되어 있음을 알 수 있습니다.


아래 댓글을 수정했습니다.

말씀드릴 수는 없지만 제 경우에는 다음을 살펴보세요.

1 S acoswt    1817     1  0  80   0 -  1036 -      07:02 tty4     00:00:00 dbus-launch --exit-with-session startplasma-x11

내 데스크탑 환경(KDE-Plasma)은 다음에 의해 시작됩니다...dbus...데몬.나는 당신이 그놈에서도 비슷한 것을 얻고 있다고 생각합니다. 다시 말하지만... 제어 터미널이 없습니다.

답변2

이 질문에는 두 부분이 있습니다.

첫째, ps가 "?"를 표시하는 이유는 매우 간단합니다. procps 라이브러리는 프로세스 상태 파일의 필드 7을 보고 이를 TTY 이름으로 확인하려고 시도합니다.

$ ps -o pid,tty,cmd -C gnome-calculator
    PID TT       CMD
  74426 ?        gnome-calculator
$ cut -f 1-9 -d' ' /proc/74426/stat
74426 (gnome-calculato) S 2325 2325 2325 0 -1 4194304

2325 뒤에 0과 -1이 표시되는 것을 보셨나요? 커널이 기본적으로 "모름" 또는 "해당 없음"을 의미하는 TTY 장치 ID입니다.

gnome-terminal을 사용하여 명령줄에서 시작하면 이제 제어 터미널이 있으므로 TTY를 얻게 됩니다.

$ ps -o pid,tty,cmd -C gnome-calculator
    PID TT       CMD
  75446 pts/2    gnome-calculator
$ cut -f 1-9 -d' ' /proc/75446/stat
75446 (gnome-calculato) S 72016 75446 72016 34818 75721 4194304

34818은 장치 ID입니다.이상한 비트마스킹 및 이동Primary ID는 136, Secondary ID는 2, 즉 /dev/pts/2의 ID가 되는 것을 알 수 있습니다.

둘째, 첫 번째 계산기에 TTY 장치 ID가 없는 이유는 X가 작동하는 방식에 따른 것입니다. 모니터가 있는 컴퓨터와 계산기 프로그램이 실행되는 컴퓨터가 다를 수 있기 때문입니다.

따라서 X 서버가 TTY2에서 실행 중인 경우 계산기 프로그램은 해당 TTY에서 실행되지 않습니다. 세션 프로세스(아마도 gnome-session)를 살펴보면 해당 프로세스가 tty2에서 실행되고 있음을 알 수 있습니다.

관련 정보