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

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

저는 이 문제를 Windows에서 해결했지만 Linux에서 수행하는 방법이 혼란스럽습니다.

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

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

즉, "테스트 테스트 123"은 전체 프로세스 제목이 될 수도 있고, 그것으로 시작될 수도 있고, 그것으로 끝날 수도 있고, 아니면 그냥 중간에 위치할 수도 있습니다. 이건 매우 중요합니다.

답변1

긴 이야기 짧게: 사용pgrep -cf "test test 123"


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

ps aux 

이제 grep검색 문자열을 사용하여 목록을 필터링할 수 있습니다.

ps aux | grep "test test 123"

그러면 일치하는 줄이 인쇄됩니다. 개수를 계산하려면 grep -cwhich를 사용하여 일치하는 줄 수를 인쇄하세요.

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))

트릭이 있어야합니다

관련 정보