해당 명령으로 프로세스가 실행되지 않는 경우 지정된 명령을 실행하는 단일 인스턴스라는 다음과 같은 간단한 스크립트가 있습니다. else 문 다음에 명령을 하드코딩하면 문제 없이 실행되지만 하드코딩된 명령을 $1 또는 $@로 바꾸면 명령의 새 인스턴스가 생성되지 않습니다. 그러한 명령을 방지하기 위해 bash에 안전 메커니즘이 있습니까?
#!/bin/bash
if ps ax | grep -v grep | grep $1 > /dev/null;then
wmctrl -xa $1
else
# works fine if I switch $1 to terminator
$1
fi
if 문 부분은 잘 작동합니다. 이 스크립트를 사용하여 프로세스를 호출하는 한 프로세스의 인스턴스는 하나만 얻습니다.
답변1
Grep "단일 인스턴스"가 호출하는 명령의 이름을 보려면 grep 옵션에 데몬을 추가했습니다. 일부 프로그램에는 창 관리자에 해당 인스턴스가 없어도 데몬이 실행되고 있기 때문입니다.
#!/bin/bash
if ps -fp $(pgrep -d, "$1") egrep -v "single-instance|daemon" | grep $1;then
wmctrl -xa $1
else
$1
fi
이 문제를 안내해 준 Mikel에게 감사드립니다.
답변2
뭐하고 지내? 어떤 종류의 데몬을 항상 실행하도록 유지하시겠습니까? 어쩌면 당신이 좀 살펴 봐야 할 것 같아요체계.