
답변1
Xterm이 /dev/ptmx
오픈되었는데 이렇게 보실 수는 없습니다. 이유는 다음과 같습니다.
실행 xterm
권한에는 S_ISGID
(set-group-ID) 비트가 설정되어 있으며 그룹 소유입니다 utmp
.
가 및 (정확한 경로는 시스템에 따라 다를 수 있음) xterm
에 항목을 추가하여 세션이 또는 의 출력에 표시되도록 그런 식으로 설정되어 있습니다 ./var/run/utmp
/var/log/wtmp
who
last
해당 권한을 사용하면 xterm
실행될 때 이를 실행하는 프로세스에서 해당 권한을 볼 수 있습니다.효과적인그룹 ID는 그룹의 ID로 변경됩니다 utmp
(그 동안읽다그룹 ID는 동일하게 유지됩니다) 쓰기 모드에서 utmp
/ 로그인 레코드를 열 수 있는 권한을 부여합니다 .wtmp
Linux에서는 보안 조치로 root
실제 사용자 ID와 다른 유효 사용자 ID 또는 실제 그룹 ID와 다른 유효 그룹 ID를 가진 프로세스의 열린 파일만 나열할 수 있습니다. (이러한 프로세스의 경우 다른 프로세스에 비해 권한이 /proc/<pid>fd
있음 을 알 수 있습니다 .)dr-x------ root root
dr-x------ you your-group
그렇기 때문에 lsof
일반 사용자로 실행할 때 해당 xterm
프로세스의 열린 파일을 나열할 수 없습니다. lsof
로 실행해야 합니다 root
.
왜 작동하는지에 대해서는 gnome-terminals
여러 가지 가능성이 있습니다.
gnome-terminal
로그인 기록에 항목을 추가하지 않습니다(내 시스템의 경우입니다).gnome-terminal
을 사용합니다utempter
돕는 사람(이 경우 sgidutmp
) 로그인 레코드를 추가합니다. 그것이 내 시스템에서 수행되는 작업입니다xterm
.konsole
gnome-terminal
utmp
로그인 기록을 업데이트한 후(그렇지xterm
않음) 유효 사용자 ID를 실제 사용자 ID로 재설정합니다(특수 액세스를 일시적으로 포기함 ).
답변2
그것은 의사 터미널 마스터 장치입니다.리눅스. 그러나 xterm은 의사 터미널을 열기 위해 POSIX 기능을 사용하는데, 이는 장치 열기에 대한 세부 사항을 숨깁니다.
의사 터미널에는 다양한 구성이 있지만 시스템에서 사용할 가능성이 높습니다.이 덩어리:
#elif defined(HAVE_POSIX_OPENPT) && defined(HAVE_PTSNAME) && defined(HAVE_GRANTPT_PTY_ISATTY)
if ((*pty = posix_openpt(O_RDWR)) >= 0) {
char *name = ptsname(*pty);
if (name != 0) {
strcpy(ttydev, name);
result = 0;
}
}
VTE(실제 터미널 에뮬레이터: "gnome-terminal"은정면) 비슷한 것을 사용합니다 (참조src/pty.cc).
실제로는 계속할 필요가 없습니다.사용하여마스터 장치의 파일 설명자입니다. xterm은 두 개의 프로세스로 실행되며용도해당 파일 설명자는 "상위" 프로세스에 있습니다. 마스터 장치에 대한 파일 설명자를 버립니다."자식" 프로세스(소스 참조).
xterm을 실행하면,하위 프로세스쉘이 대화하는 것입니다. 예를 들어, 다음을 실행하면tty
어떤 터미널을 사용하고 있는지 확인하려면(즉,노예의사 터미널의 측면과주인각 프로세스는 의사 터미널의 한쪽 면에서만 작동해야 하기 때문에 측면이 닫혀 있습니다.
그만큼상위 프로세스(열린 /dev/ptmx
)은 X 창 표시를 관리합니다.
lsof
이 모든 것을 감안할 때 show xterm이 열린 것으로 기대합니다 /dev/ptmx
. 제외하고:
- 스크린샷에서 메시지는 현재 실행 중이 아니라는 것을 암시합니다.뿌리
lsof
, 모든 프로세스를 볼 수 없는 권한 문제가 있는 경우 누락된 정보가 원인일 수 있습니다. - xterm은 실제로 실행 중인 컴퓨터에서 실행되고 있지 않습니다 . 예를 들어 해당 컴퓨터에 ssh를 연결한 경우(그리고 우연히 다른 세션에서 실행 중인
lsof
것으로 표시되는 경우 )gnome-terminal