모든 Windows 실행 명령 나열

모든 Windows 실행 명령 나열

다음 명령을 사용하여 각 창의 프로세스 ID를 나열할 수 있습니다.

wmctrl -lp

각 창을 표시하는 명령이 있습니까 running command(htop에 "명령" 열이 있는 것과 같습니다)?

그렇지 않다면 최종적으로 이를 달성하기 위해 명령을 어떻게 결합합니까?

답변1

wmctrl -lp그러면 출력의 pid가 발견되면 해당 명령으로 대체됩니다.

wmctrl -lp | awk '{ pid=$3; cmd="ps -o comm= " pid; while ((cmd | getline command) > 0) { sub(" " pid " ", " " command " ") }; close(cmd) } 1'

이는 분명히 원격 프로세스를 표시하는 창에서는 작동하지 않습니다. 어떤 경우에는 샌드박스 프로세스에 해당하는 창에 이상한 결과가 표시되기도 합니다(예를 들어플랫 팩).

AWK 스크립트는 각 줄을 읽고 pid를 추출한 후 ps -o comm=해당 명령을 실행합니다. 발견된 경우 해당 pid 문자열을 명령으로 바꿉니다.

답변2

와, 오늘 뭔가 배웠습니다 wmctrl.

글쎄요, 꽤 가깝습니다! 다음 PID를 가져와서 해당 명령을 확인하세요.

for pid in $(wmctrl -lp | tr -s " "| cut -d ' ' -f3); do
#^--|------|--------------|-----------|------------- for .. in .. loop
#   |      |              |           |              
#   \------|--------------|-----------|------------- name of the variable we'll set
#          |              |           |              each iteration
#          |              |           |              
#          \--------------|-----------|------------- $(command): replaces $(..) 
#                         |           |              with output of `command`
#                         |           |              
#                         \-----------|------------- translate character " " by -s:
#                                     |               "squeeze" multiple consecutive 
#                                     |               spaces into one
#                                     |               
#                                     \-------------- cut at ' ', take the 3rd field
  cat "/proc/${pid}/cmdline"
  echo ""
done

또한 흥미로운 점은 다음과 같습니다.

for wm_id in $(wmctrl -l | cut -d ' ' -f1); do
  xprop -id "${wm_id}" WM_CLASS
done

관련 정보