DISPLAY 변수가 설정된 프로세스를 확인하는 방법은 무엇입니까?


8

때로는 표시에 문제가 있으며 주로 DISPLAY 환경 변수를 사용하는 파일 또는 프로세스를 알고 싶습니다.

그렇다면 DISPLAY가 설정된 모든 프로세스를 나열하는 방법은 무엇입니까?

답변:


13

많은 검색과 시도 후에이 명령을 내 렸습니다.

for file in /proc/[0-9]*; do grep -ao 'DISPLAY=[^[:cntrl:]]*' $file/environ 2>/dev/null && grep -ao '(.*)' $file/stat; done | sed 'N;s/\n/\t/'

출력 샘플은 다음과 같습니다.

DISPLAY=:0  (unity-files-dae)
DISPLAY=:0  (unity-music-dae)
DISPLAY=:0  (unity-lens-vide)
DISPLAY=:0  (zeitgeist-daemo)
DISPLAY=:0  (zeitgeist-fts)
DISPLAY=:0  (zeitgeist-datah)
DISPLAY=:0  (cat)
DISPLAY=:0  (unity-scope-vid)
DISPLAY=:0  (unity-musicstor)
DISPLAY=:0  (dconf-service)
DISPLAY=:0  (gdu-notificatio)
DISPLAY=:0  (telepathy-indic)
DISPLAY=:0  (mission-control)
DISPLAY=:0  (goa-daemon)
DISPLAY=:0  (VBoxXPCOMIPCD)

1
좋은 해결책. 무대 뒤에서 일어나는 일에 대한 설명을 추가해 주시겠습니까? 또한 출력물이 잘립니다. 전체 프로세스 이름을 얻으려면 어떻게해야합니까?
Danatela

1
이 명령은 / proc 디렉토리에서 재귀 적으로 검색합니다. DISPLAY각 파일에서 grep을 수행 하십시오. 이러한 파일은 실제로 실행중인 프로세스에 있으므로 단어를 포함하는 모든 파일 DISPLAY은이 프로세스가이를 사용하고 있음을 의미합니다. 출력의 이름이 발견 된 파일 이름 /proc이므로 전체 프로세스 이름을 얻을 수 없으므로 제공된 것보다 더 많은 것을 알 수 없습니다.
Maythux

1
대신 답변을 수정하고 게시물을 업데이트했음을 사용자에게 알리십시오.
Braiam

DISPLAY env 변수를 엉망으로 만들고 DISPLAY의 값을 변경하기 전에 DISPLAY의 값이 무엇인지 알고 싶었습니다. 이력에 대해 알 수있는 쉼표를 알지 못했기 때문에이 명령을 사용하여 이전 프로세스 중 어떤 DISPLAY 값을 사용했고 내 문제가 해결되었습니다.
yaxe

1

Maythux 스크립트를 약간 수정하면 DISPLAY 변수를 사용하여 프로세스의 PID를 얻을 수도 있습니다.

for file in /proc/[0-9]*; do grep -ao 'DISPLAY=[^[:cntrl:]]*' $file/environ 2>/dev/null && grep -ao '[0-9]* (.*)' $file/stat; done | sed 'N;s/\n/\t/' |column -t |sort -n -k2

출력은 다음과 같습니다.

DISPLAY=:0  590    (lxsession)
DISPLAY=:0  645    (unclutter)
DISPLAY=:0  705    (gvfsd)
DISPLAY=:0  710    (gvfsd-fuse)
DISPLAY=:0  727    (openbox)
DISPLAY=:0  729    (lxpolkit)
DISPLAY=:0  732    (lxpanel)
DISPLAY=:0  734    (pcmanfm)
DISPLAY=:0  772    (menu-cached)
DISPLAY=:0  781    (gvfs-udisks2-vo)
DISPLAY=:0  791    (gvfs-gphoto2-vo)
DISPLAY=:0  795    (gvfs-mtp-volume)
DISPLAY=:0  799    (gvfs-afc-volume)
DISPLAY=:0  804    (gvfs-goa-volume)
DISPLAY=:0  816    (gvfsd-trash)
DISPLAY=:0  21053  (npm)
DISPLAY=:0  21102  (sh)
DISPLAY=:0  21103  (sh)
DISPLAY=:0  21104  (node)
DISPLAY=:0  21110  (electron)
DISPLAY=:0  21112  (electron)
DISPLAY=:0  21149  (electron)
DISPLAY=:0  21154  (electron)
DISPLAY=:0  21180  (rec)

0

꽤 멋진 명령 줄 스크립팅입니다! 다른 것을 알아 내기 위해 해킹해야 할 경우를 대비하여 해당 스크립트에 사본을 만들 것입니다.

로그인 후 로컬 컴퓨터에서 실행하는 프로그램에 해당하는 모든 현재 프로세스는 첫 번째 열린 pts (의사 터미널 세션) 콘솔과 동일한 표시 변수를 가지고 있습니다.

예를 들어 첫 번째 터미널 세션 (gnome-terminal)을 열고 who 또는 w 명령을 실행하면 다음과 같은 출력이 나타납니다.

$ who

yourusername   :0        2015-06-08 14:05 (:0)
yourusername   pts/0     2015-06-08 14:22 (:0)

또는 일부 사람들은 다음과 같이 보일 수 있습니다 (그러나 귀하의 경우는 아닙니다)

yourusername   :0        2015-06-08 14:05 (:0)
yourusername   pts/0     2015-06-08 14:22 (:0.0)

쉘의 로그인 후 실행을 위해 DISPLAY 변수가 다르게 설정된 경우 라이트 디스플레이 관리자를 사용하면 (예 : 0.0), DISPLAY의 환경 변수는 첫 번째 열린 pt의 사후 로그인 디스플레이 변수와 동일한 디스플레이 변수를 생성합니다 (: 0.0)이지만 로그인시 호스트 변수는 여전히 (: 0)입니다.

DISPLAY 변수를 반향하거나 실행 세트를 아래 표시된대로 줄이십시오.

:~$ echo $DISPLAY

또는

:~$ set | less

쉘의 로그인 후 실행을 위해 세션의 현재 표시 변수를 확인하고 설정 내용을 확인할 수도 있습니다. 따라서 기본적으로 실행하는 프로세스의 표시 변수는 로그인 후 첫 번째 열린 pt와 동일한 표시 변수를 갖습니다.

게시 한 스크립트의 결과는 첫 번째 열린 pt가 디스플레이 관리자의 로그인과 동일한 디스플레이 변수를 가질 것을 제안합니다 (이 경우 : 0).

이제 두 번째 예에서 출력은 다음과 같습니다.

DISPLAY=:0.0    (gvfs-udisks2-vo)
DISPLAY=:0.0    (zeitgeist-daemo)
DISPLAY=:0.0    (zeitgeist-fts)
DISPLAY=:0.0    (zeitgeist-datah)
DISPLAY=:0.0    (gvfs-mtp-volume)
DISPLAY=:0.0    (gvfs-gphoto2-vo)
DISPLAY=:0.0    (gvfs-afc-volume)
DISPLAY=:0.0    (geyes_applet2)
DISPLAY=:0.0    (indicator-apple)
DISPLAY=:0.0    (cat)
DISPLAY=:0.0    (python)
DISPLAY=:0.0    (gvfsd-trash)
DISPLAY=:0.0    (indicator-keybo)
DISPLAY=:0.0    (gvfsd-burn)
DISPLAY=:0.0    (cat) 
DISPLAY=:0.0    (cat)
DISPLAY=:0.0    (gnome-terminal)
DISPLAY=:0.0    (bash)
DISPLAY=:0.0    (bash)
DISPLAY=:0.0    (sed)

또한 자세한 내용은 ptmx의 맨 페이지를 참조하십시오.

$ man ptmx

이는 의사 터미널의 마스터-슬레이브 관계에 대한 통찰력을 제공 할 수 있습니다.

이게 도움이 되길 바란다!

또한 그 대본을 어디서 얻었습니까?

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.