`ps | grep -v |

`ps | grep -v |
ps aux  | grep firefox

"firefox"라는 문자열이 포함된 모든 프로세스를 나열합니다.

ps aux  | grep -v firefox

"firefox" 문자열이 없는 모든 프로세스를 나열합니다.

ps aux | grep -v grep | grep firefox?

두 번째 grep은 무엇을 합니까? grep 자체는 명령인데 왜 다른 grep을 grep해야 합니까?

답변1

다음과 같은 명령을 실행할 때

ps aux  | grep firefox

그런 다음 grep프로세스그 자체찾고 있는 단어가 이미 존재하기 때문에 출력에 나타날 수 있습니다. 예를 들어 내 컴퓨터에서 실행 chrome하면 비슷한 결과가 나타납니다.

% ps aux | grep chrome
sweh      3384  0.0  0.0  11128  1024 pts/1    S+   07:08   0:00 grep chrome
sweh     23698  0.0  0.0   6384   620 ?        S    Jul04   0:00 /usr/lib/chromi

grep우리는 프로세스 3384가 명령이고 일치한다는 것을 알 수 있습니다.크롬 합금나타나다.

이를 피하기 위해 어떤 사람들은 두 번째 줄을 추가하여 | grep -v grep줄을 제거합니다.

하나 있다속이다하지만...

ps aux | grep '[f]irefox'

grep '[f]irefox'정확히 같은 줄과 일치 grep firefox하지만 이제 grep단어가 실제로 명령에 나타나지 않기 때문에 명령 자체가 일치하지 않습니다.

답변2

ps명령은 현재 실행 중인 모든 프로세스를 출력합니다. 첫 번째는 목록에서 grep프로세스를 제거 합니다. grep두 번째는 firefox필터링된 목록의 모든 프로세스를 추출합니다.

이는 firefox프로세스의 프로세스 ID(PID)를 가져오려는 시도의 일부일 수 있으며, 실행 중인지 확인하거나 종료하기 위한 것일 수도 있습니다.

이 경우 pgrep(또는 pkill프로세스를 종료하려면 )를 사용하는 것이 좋습니다.

if pgrep firefox 2>/dev/null; then
  echo "firefox is already running"
else
  echo "starting firefox..."
  firefox &
done

종료 firefox:

pkill firefox

그건,아니요먼저 PID를 찾기 위해 먼 길을 가야 합니다.

pgreppkill시스템 설명서 도 참조하십시오 .

답변3

분석하다ps aux | grep -v grep | grep firefox

ps aux프로세스의 출력을 제공합니다. 첫 번째 grep( )은 grep -v grep해당 단어가 포함된 모든 줄을 제거합니다. 그 후, 출력은 다시 grep()되어 단어를 찾고 출력됩니다.ps auxgrepgrep firefoxfirefox

관련 정보