프로그램명에 걸맞게 클릭률이 왜 이렇게 높은 걸까요?

프로그램명에 걸맞게 클릭률이 왜 이렇게 높은 걸까요?

/bin/ps -aux | /bin/grep -c "blynk"내 상자에서는 blynk 서버가 실행되고 있지 않기 때문에 코드가 1을 반환합니다.

그러나 bash 파일에서 동일한 코드를 실행하면 4가 반환됩니다. 어떻게 이런일이 일어 났습니까?

#!/bin/sh
stat=`/bin/ps -aux | /bin/grep -c "blynk"`
if [ $stat -lt "2" ]; then
    echo not running
else 
    echo running
    date
fi

답변1

grep자신이 그것을 발견 하지 못하도록 해야 합니다 . 간단한 방법은 다음과 같습니다.

/bin/ps -aux | /bin/grep -c "[b]lynk"

이렇게 하면 명령줄에 포함하지 않고도 grep검색 할 수 있습니다. 또는 동시 실행을 blynk방지합니다 .grep

/bin/ps -aux >ps.txt
/bin/grep -c "[b]lynk" ps.txt

물론, grep 명령줄을 전혀 사용하지 않는 것이 합리적입니다. file 로 여는 편집기도 찾을 수 있기 때문입니다 README.blynk.

pgrep따라서 출력을 사용 하거나 수정하여 ps명령 이름이나 명령 경로로 제한하는 것이 좋습니다 .

답변2

grep해당 패턴과 일치하는 프로그램이 더 많이 실행되고 있으므로 더 높은 숫자를 얻게 됩니다 .

grepmatch 없이 출력을 보면 -cmatch 출력에 어떤 줄이 있는지 알 수 있습니다 ps. 예를 들어, 다음과 같은 스크립트를 작성하면 다음 세 개가 표시됩니다.

$ cat check_blynk.sh
#!/bin/bash
foo=$(/bin/ps a | /bin/grep "blynk")
echo "$foo"

$ bash check_blynk.sh
28874 pts/11   S+     0:00 bash check_blynk.sh
28875 pts/11   S+     0:00 bash check_blynk.sh
28877 pts/11   S+     0:00 /bin/grep blynk

grep이는 사용하는 패턴이 자체적으로 일치하고 스크립트의 이름에 동일한 단어가 포함되어 있기 때문 입니다 .다른실제로 이는 ps | grep쉘의 또 다른 복사본인 하위 쉘에서 실행됩니다. (네번째는 뭔지 모르겠네요.)

프로그램 파일의 이름을 가정 pgrep -c blynk해 보겠습니다 . 기본적으로 전체 명령줄이 아닌 실행 중인 프로그램의 실제 파일 이름을 확인합니다. ( 명령줄을 확인하는 데 사용하지만 다시 Bash 스크립트와 일치하게 됩니다)blynkpgrep-f

답변3

bash만료된 상황(좀비, 데드)을 제외하고 명령 프로세스가 실행 중인지 확인하는 함수:

_isRunning() {
    ps -o comm= -C "$1" 2>/dev/null | grep -x "$1" >/dev/null 2>&1
}

노트: ps죽은 프로세스도 보고되므로 다음을 grep -x사용하십시오 .

사용 예:

if _isRunning blynk; then
  echo not running
else 
  echo running
  date
fi

관련 정보