Linux에서 프로세스 제목에 "test test 123"라는 정확한 문자열이 있는 프로세스 수를 어떻게 확인합니까?

Linux에서 프로세스 제목에 "test test 123"라는 정확한 문자열이 있는 프로세스 수를 어떻게 확인합니까?

나는 이미 Windows에서 이것을 알아냈지만 Linux에서 이를 수행하는 방법은 나에게 도움이 되지 않습니다.

tasklist /V /NH | find "test test 123"

그런 다음 출력에서 ​​비어 있지 않은 줄 수를 셉니다. 이것은 매우 느리지만 작동합니다. 이제 저는 동일한 작업을 수행하는 Linux 방법을 찾고 있습니다.

즉, "테스트 테스트 123"은 전체 프로세스 제목이 될 수 있고, 시작하거나 끝날 수도 있고, 중간에 있을 수도 있습니다. 이건 중요하다.

답변1

TL;DR: 사용pgrep -cf "test test 123"


프로그램 ps은 실행 중인 모든 프로세스를 나열합니다. 구체적으로 다음을 시도해 보세요.

ps aux 

이제 grep문자열을 검색하기 위해 해당 목록을 필터링할 수 있습니다.

ps aux | grep "test test 123"

그러면 일치하는 줄이 인쇄됩니다. 이를 계산하려면 grep -c대신 일치하는 줄 수를 인쇄하는 which를 사용하십시오.

ps aux | grep -c "test test 123"

이 접근 방식의 문제점은 grep위의 프로세스가 결과에도 나타난다는 것입니다. 예를 들어, 현재 이라는 파일을 편집하고 있는데 test test 123위 명령을 실행하면 파일 편집기의 프로세스와 자체 프로세스가 모두 표시됩니다 grep.

$ ps aux | grep  "test test 123"
terdon   2461453 22.0  0.2 392944 79796 pts/1    Sl   15:53   0:02 emacs test test 123
terdon   2462354  0.0  0.0   8832  2292 pts/1    S+   15:53   0:00 grep --color test test 123

따라서 는 다음 대신 grep -c반환됩니다 .21

$ ps aux | grep -c "test test 123"
2

작업에 적합한 도구인 pgrep. 이는 프로세스를 찾기 위해 특별히 설계된 도구입니다.

$ pgrep -cf "test test 123"
1

"일치하는 항목 수 계산"을 의미 -c하고 -f"프로세스 이름뿐만 아니라 전체 명령줄 검색"을 의미합니다.

자체 를 건너뛰는 또 다른 일반적인 방법은 명령줄에 문자열이 포함되지 않도록 grep동일한 문자열 대신 한 문자 문자 클래스를 사용하는 것입니다 .grep

$ ps aux | grep  "test test 123"
terdon   2461453  1.2  0.2 392944 79796 pts/1    Sl   15:53   0:02 emacs test test 123
terdon   2476971  0.0  0.0   8832  2236 pts/1    S+   15:56   0:00 grep --color test test 123
$ ps aux | grep  "[t]est test 123"
terdon   2461453  1.2  0.2 392944 79796 pts/1    Sl   15:53   0:02 emacs test test 123
$ ps aux | grep -c "[t]est test 123"
1

이 트릭에 대한 자세한 내용은 다음을 참조하세요.여기. 그러나 시스템이 pgrepLinux 시스템과 같은 경우에는 이것이 실제로 필요하지 않습니다.

답변2

echo $(( $(ps aux | grep "test test 123" | wc -l) - 1))

트릭을해야한다

관련 정보