
나는 명령을 필터링할 수 있는 "-C" 인수를 알고 있습니다.
하지만 내 시나리오에서는 프로세스 이름이 동일하고 인수가 다른 일부 프로세스가 있을 수 있습니다.
이 인수를 필터링하는 방법은 무엇입니까?
(나중에 grep으로 파이프할 수 있다는 것을 알고 있지만 100% 정확하지는 않습니다. 예: 인수에 다른 인수가 포함될 수 있는 경우, 예를 들어 다음 목록에서 인수 "bar"로 필터링하려는 경우:
+---------+---------+-----------+
| Process | Command | Arguments |
+---------+---------+-----------+
| 23 | foo | bar |
| 48 | foo | barbaz |
+---------+---------+-----------+
추신: 대부분의 답변에서는 "ps" 대신 "pgrep"을 사용하도록 권장할 것 같지만 가능하면 이를 피하고 싶습니다.
답변1
나는 당신이 혼자서 그것을 달성할 수 있다고 생각하지 않습니다 ps
. 필터링을 사용하는 것이 이상적이지 않다는 말이 맞습니다 grep
. 그러나 기회를 기꺼이 제공하려는 경우 다음을 pgrep
사용하여 요구 사항에 상당히 근접할 수 있습니다.
ps -p $(pgrep -f bar -d',')
이 -f
옵션은 pgrep
프로세스 이름만이 아닌 전체 명령줄을 검색하도록 하는 반면, -d
옵션은 pid를 함께 문자열로 묶는 데 사용할 구분 기호를 지정합니다.
따라서 pid 목록을 전달하면 ps
전체 명령(인수 포함)에 키워드가 포함된 출력으로 출력이 제한됩니다.
"foo bar"는 일치하지만 "foo barbaz"는 일치하지 않으려는 예에서 다음과 정확히 일치하는 항목을 검색합니다.
ps -p $(pgrep -f "foo bar$" -d',') # Note the eol anchor '$'
답변2
나는 그러한 옵션이 존재한다고 생각하지 않습니다. 적어도 내 버전의 ps
. 많은 구현에 그러한 옵션이 있는지 의심됩니다 ps
. 명령 이름은 정의하기가 매우 간단하지만 명령 인수에 관해서는 확실히 그렇지 않습니다.
어쨌든 Unix 철학은 더 복잡한 작업을 수행하기 위해 많은 간단한 도구(예: ps
및 )를 연결하는 것입니다. grep
누군가는 ps -C
이를 추진하고 있다고 주장할 수도 있습니다. 사실 저는 MacOS X에는 ps
그러한 옵션이 없다고 믿습니다.
정확히 무엇을 하려는 건가요?이것은문맥당신의 질문에? 내 경험에 따르면 사람들이 출력을 구문 분석하여 작업을 자동화하는 경우의 99%가 ps
잘못된 방식으로 진행되고 있기 때문입니다.