Bash 스크립트를 사용하여 애플리케이션이 실행 중인지 확인하는 방법은 무엇입니까?

Bash 스크립트를 사용하여 애플리케이션이 실행 중인지 확인하는 방법은 무엇입니까?

내 홈 폴더에 gnome에서 실행되는 응용 프로그램이 있습니다. 이제 Meta+를 누르면 실행하고 싶은 애플리케이션을 추가했습니다 R.CCSM). 내 홈 폴더에서 실행하여 응용 프로그램을 실행합니다 ./gnome-run.
출력물에서 신청 과정의 흔적을 찾을 수 없습니다 ps -A.

문제는 gnome-run 프로그램을 열고 키 조합을 누르면 응용 프로그램이 닫히기를 원한다는 것입니다. 응용 프로그램이 실행 중인지 확인하기 위해 bash 파일을 만드는 방법이 있습니까? 그렇다면 닫고 그렇지 않으면 시작하십시오.

답변1

이 셸 스크립트는 모든 프로그램 시작 및 중지를 처리해야 합니다.

#!/bin/bash

BASECMD=${1%%\ *}
PID=$(pgrep "$BASECMD")
if [ "$?" -eq "0" ]; then
    echo "at least one instance of "$BASECMD" found, killing all instances"
    kill $PID
else
    echo "no running instances of "$BASECMD" found, starting one"
    $1
 fi

아래에 저장한다고 가정하면 ~/mystarter이를 사용하여 모든 명령을 실행할 수 있습니다 ~/mystarter <name>. 예를 들어 귀하의 경우에는 Meta+를 R다음에 바인드합니다.

~/mystarter gnome-run

그리고 스크립트가 실행 가능한지 확인하십시오. 또한 매번 전체 위치를 입력할 필요가 없도록 chmod u+x ~/mystarter어딘가에 두는 것이 좋습니다 .PATH

gnome-run에 나타나지 않는다는 사실은 ps -Agnome run 자체가 실제 프로세스를 시작하는 스크립트가 아닌지 확인하십시오. ps -A | wc -l시작 전후의 차이점을 확인하십시오 (실행 중인 모든 프로세스가 계산됩니다).

편집하다:

이제 답변을 수락하셨으므로 이것이 참조점이 될 수 있도록 명령줄 인수를 사용하여 명령을 실행하는 지원을 추가해야겠다고 생각했습니다. 다음 명령을 실행하십시오.

 ./mystarter 'cmd args'

예를 들어:

./mystarter 'ncmpcpp -c ~/.ncmpcpp'

이 명령은 단순히 이미 실행 중인지 확인하고, ncmpcpp그렇지 않은 경우 전체 명령(인수 포함)을 실행합니다.ncmpcpp

관련 정보