인수를 필터링할 수 있는 'ps' 명령에 플래그를 지정하시겠습니까?

인수를 필터링할 수 있는 'ps' 명령에 플래그를 지정하시겠습니까?

나는 명령을 필터링할 수 있는 "-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잘못된 방식으로 진행되고 있기 때문입니다.

관련 정보