답변:
많은 검색과 시도 후에이 명령을 내 렸습니다.
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)
DISPLAY각 파일에서 grep을 수행 하십시오. 이러한 파일은 실제로 실행중인 프로세스에 있으므로 단어를 포함하는 모든 파일 DISPLAY은이 프로세스가이를 사용하고 있음을 의미합니다. 출력의 이름이 발견 된 파일 이름 /proc이므로 전체 프로세스 이름을 얻을 수 없으므로 제공된 것보다 더 많은 것을 알 수 없습니다.
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)
꽤 멋진 명령 줄 스크립팅입니다! 다른 것을 알아 내기 위해 해킹해야 할 경우를 대비하여 해당 스크립트에 사본을 만들 것입니다.
로그인 후 로컬 컴퓨터에서 실행하는 프로그램에 해당하는 모든 현재 프로세스는 첫 번째 열린 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
이는 의사 터미널의 마스터-슬레이브 관계에 대한 통찰력을 제공 할 수 있습니다.
이게 도움이 되길 바란다!
또한 그 대본을 어디서 얻었습니까?