답변1
Xterm은 이미 /dev/ptmx
열려있지만 이렇게는 볼 수 없습니다. 이유는 다음과 같습니다.
실행 xterm
권한에는 S_ISGID
(set-group-ID) 비트가 설정되어 있으며 그룹이 소유합니다 utmp
.
이 방식은 항목을 및 (정확한 경로는 시스템에 따라 다를 수 있음) xterm
에 추가하여 세션이 또는 의 출력 에 표시되도록 설정됩니다 ./var/run/utmp
/var/log/wtmp
who
last
이러한 권한을 사용하면 xterm
실행될 때 이를 실행하는 프로세스에서 해당 권한을 볼 수 있습니다.효과적인utmp
그룹 ID는 그룹의 ID 로 변경됩니다 (또한읽다그룹 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