
나는 이미 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
반환됩니다 .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))
트릭을해야한다