저는 이 문제를 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 -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
대신 :2
1
$ 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
이 기술에 대한 자세한 내용은 다음을 참조하세요.여기. 그러나 시스템에 pgrep
Linux 시스템의 기능이 있다면 실제로는 필요하지 않습니다.
답변2
echo $(( $(ps aux | grep "test test 123" | wc -l) - 1))
트릭이 있어야합니다