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))
pgrep
POSIX에 의해 정의되지 않았습니다. 예를 들어 최근까지 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
리디렉션도 필요합니다.