다음과 같이 사용할 때 grep
:
ps aux | grep 'processname' | awk '{print $2}'
의 PIDs
프로세스가 processname
반환됩니다. 이것을 사용할 때:
ps aux | grep '^processname' | awk '{print $2}'
명령줄이 로 시작하는 프로세스를 가져오려고 하는데 processname
작동하지 않습니다.
실행 중인 프로세스 예시:
processname
other_processname
명령의 시작이기 PID
때문에 첫 번째 옵션을 얻고 싶습니다 .processname
나는 또한 -E, -e, -w
플래그를 사용해 보았고 모두 동일한 결과를 반환했습니다. 무엇이 잘못되었나요?
답변1
^
필드가 아닌 줄의 시작을 표시합니다.
ps aux | grep ' processname'
더 가까워지겠지만 여전히 일부 오탐지가 발생할 수 있습니다.
다른 열의 너비는 고정되어 있으므로 다음을 사용할 수도 있습니다.
grep '^.\{65\}processname'
여기서는 ^.\{65\}
줄 시작 부분부터 정확히 65자입니다. 정확한 숫자는 시스템에 따라 다를 수 있습니다.
이미 awk를 사용하고 있으므로 이것이 더 나은 옵션일 수 있습니다.
ps aux | awk '{ if ($11 == "processname") print $2 }'
더 쉽게 파악하기 위해 ps의 출력 형식을 다시 지정할 수도 있습니다.
ps ax -o pid,args | grep '^[^ ]\+ processname'
스위치는 -o pid,args
ps가 PID와 인수가 있는 명령만 표시하도록 합니다. 이 표현식은 ^[^ ]\+
줄 시작 부분부터 첫 번째 공백까지의 모든 문자와 일치합니다.