$ 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에서 실행되고 있음을 알 수 있습니다.