단일 사용자 상황에서의 예 xterm
를 살펴보면 pid 수를 계산할 수 있습니다 xterm
. xterm
각 창마다 별도의 pid를 만듭니다.
gnome-terminal
그러나 하나의 pid를 실행하지만 좋은 소식은 각 창 및 / 또는 탭마다 자식 프로세스를 만드는 것입니다. 다음과 같은 명령으로 이러한 하위 프로세스를 검색 할 수 있습니다.
pgrep -P <pid_of_gnome-terminal>
그러나 다루어야 할 몇 가지 합병증이 있습니다.
귀하의 질문을 읽으면 이 경우 사용자 는 실제로 x-session의 소유자 라고 가정 할 수 있습니다 . 일반적으로 단순히 $USER
-variable을 사용할 수 있지만 현재 로그인 한 사용자와 일치하지 않을 수 있습니다 $DISPLAY
.
다중 사용자 상황에서 (어떤) 터미널 응용 프로그램에 속하는 pid는 반드시 current에 속할 필요는 없습니다 $DISPLAY
. 관련 pid와 자식 pid 만 분리해야합니다.
Unity (15.10 이하)에서 두 번째 사용자가 로그인하면 추가 프로세스가 시작 ( gnome-pty-helper
)되며에 하위 프로세스로 표시 gnome-terminal
되지만 프로세스에는 창 또는 탭이 없습니다. 에 메이트 , 과정은 어쨌든 존재한다.
한마디로
터미널 애플리케이션의 탭 및 / 또는 창 수를 세려면 다음을 수행해야합니다.
- 하나의 x 에 여러 개의 pid 또는 하나의 pid 가있는 터미널 응용 프로그램을 실행하는지 확인하십시오
$DISPLAY
- 실행중인 프로세스 에서 관련 pid 만 분리 하십시오.
$DISPLAY
- 응용 프로그램이 pid에 대한 자식 프로세스를 실행하는 경우 (Windows / 탭의 경우)
gnome-pty-helper
실행 여부를 확인 하여 숫자를 수정하십시오.
그러나 현재 열려있는 창 및 / 또는 탭의 수를 안정적으로 찾기 위해 스크립트를 작성하는 것이 좋습니다.
스크립트
아래 스크립트에서 대상 터미널 응용 프로그램이 인수 로 사용됩니다 . 스크립트는 내가 테스트 한 많은 터미널에서 작동합니다. 현재 예외입니다 Tilda
.
예
- 두 명의 사용자가 로그인했습니다. 하나는 (현재가 아님) 두 개의
gnome-terminal
창이 있고, 하나는 (이미지의 하나는) 세 개의 gnome-terminal
창이 있고, 두 개의 xterm
창이 있습니다.
명령 :
/path/to/get_terms.sh gnome-terminal
출력 :
3
동안
/path/to/get_terms.sh xterm
출력 :
2
스크립트
#!/bin/bash
terminal=$1
# get the user running the current x-session
username=$(who | grep $DISPLAY | head -1 | awk '{print $1}')
# get the pid of the terminal for the current user
userpid=$(pgrep -u $username $terminal)
# check what type the terminal is (multi pid/single pid)
npids="$(echo "$userpid" | wc -w)"
# in case of a single pid, count the children
if [ "$npids" -eq 1 ]; then
# check if gnome-pty-helper runs (starts when multiple users are logged in)
ptpid=$(pgrep gnome-pty-helpe)
# get number of child- procs
let "orig = $( pgrep -P $(pgrep -u $username $terminal) | wc -w )"
# if pty-helper runs, correct the number of child procs
if [ -n "$ptpid" ] && [ -n "$userpid" ]; then
let "n_terms = $orig-1"; else let "n_terms = $orig"
fi
# if no child procs run, n-terminals = n-counted pids (difference Mate <> Unity)
if [ "$n_terms" -eq 0 ]; then echo $orig; else echo $n_terms; fi
# in case of multiple pids, count the pids
elif [ "$npids" -gt 1 ]; then echo $npids
fi
쓰다
tty
. 나는 우리 / 다른 사람들이 그 "질문"에 너무 집중하고 전체 "필요"에 대한 다른 해결책이 있다는 것을 잊어 버린 것 같습니다 :) 심지어 임의의 색상 선택기를 구현하는 것조차 할 것입니다. 256 색인 경우 동일 / 유사한 색상을 선택하면 별다른 문제가 발생하지 않습니다. 그러나 주어진 pts 숫자에 대한 색상을 수동으로 설정하면 더 나은 개인화가 가능합니다.