특정 프로그램이 열려 있는지 확인하는 방법

특정 프로그램이 열려 있는지 확인하는 방법

1터미널의 명령줄을 사용하여 프로그램(예: Firefox 또는 Chromium)이 열려 있는지 여부를 표시하고 싶습니다 0.

편집: "열기"는 "현재 컴퓨터에서 실행 중이고 내가 본 X 서버에서 창이 열려 있음"을 의미합니다.

답변1

xwininfo -root -children | grep -q '"Firefox")'
echo "$(($? == 0))"

X 서버에 연결된 클래스 창이 있는 경우 Firefox(모든 컴퓨터의 모든 사용자에 의해) 1이 출력됩니다.

Firefox 프로세스를 이 명령을 실행하는 컴퓨터로 제한하려면:

xwininfo -root -children |
  awk '/"Firefox"\)/{print $1}' |
  xargs -I% xprop -id % WM_CLIENT_MACHINE |
  cut -d\" -f2 |
  grep -qFx "$(uname -n)"

프로세스 이름으로 검색한다고 해서 프로세스가 실제로 창을 표시한다는 보장은 없습니다.당신의X 서버.

위의 접근 방식은 옵션이 전달되지 않았을 때 Firefox가 현재 실행 중인 Firefox를 확인하는 방법과 일치합니다 --no-remote.

답변2

pgrep -x chromium와 같은 프로세스 이름은 일치하지 않으며 chromium-foo다음 > /dev/null으로 대체될 수 있습니다 -q.

pgrep -xq chromium; echo $(($? == 0))

pgrepPOSIX에 의해 정의되지 않았습니다. 예를 들어 최근까지 OS X에 포함되지 않았습니다. 그러나 다음을 사용할 수도 있습니다 ps.

ps -eo comm= | grep -xq chromium; echo $(($? == 0)) # GNU
ps -eco comm= | grep -xq chromium; echo $(($? == 0)) # OS X
ps -eo comm= | sed 's|.*/||' | grep -xq chromium; echo $(($? == 0)) # either

OS X에서는 -o comm명령의 절대 경로를 인쇄하고 -co comm기본 이름을 인쇄합니다. 기본 이름은 GNU로 인쇄 -o comm되며 -c정의되지 않습니다.

답변3

특정 이름을 가진 프로세스가 현재 실행 중인지 확인하는 방법에는 여러 가지가 있습니다. 하나는 사용하는 pgrep것이고 다른 하나는 다음을 사용하는 것입니다 ps.

pgrep "chromium" >/dev/null 2>&1 && echo 1 || echo 0
ps aux | grep "[c]hromium" >/dev/null 2>&1 && echo 1 || echo 0
grep "[c]hromium" <(ps aux) >/dev/null 2>&1 && echo 1 || echo 0

pgrep명령은 이름으로 프로세스를 찾고 해당 인수와 일치하는 모든 프로세스의 PID를 표시합니다. 여기서는 pgrep출력(및 로 리디렉션) 대신 반환 값이 사용되므로 /dev/null일치하는 항목이 있는지 알 수 있습니다. 이 grep명령은 일치 항목도 표시하므로 stdout리디렉션도 필요합니다.

관련 정보