애플리케이션이 실행 중인지 Bash 스크립트로 어떻게 확인합니까?

애플리케이션이 실행 중인지 Bash 스크립트로 어떻게 확인합니까?

내 홈 폴더에 gnome-run 애플리케이션이 있습니다. 이제 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 실행 자체가 실제 프로세스를 시작하는 스크립트가 아닌지 확인하세요. ps -A | wc -l실행 전과 실행 후의 차이가 있는지 확인하세요 (실행 중인 모든 프로세스가 포함됨).

편집하다:

답변을 수락하셨으므로 참고할 수 있도록 명령줄 인수가 있는 명령 실행에 대한 지원을 추가해야겠다고 생각했습니다. 다음과 같이 명령을 실행합니다.

 ./mystarter 'cmd args'

예:

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

이 명령은 이미 실행 중인지 조회 하지만 실행 중이 아닐 ncmpcpp때는 전체 명령(인수 포함)을 실행합니다 .ncmpcpp

관련 정보