OR 대신 AND로 절을 사용하여 ps 실행

OR 대신 AND로 절을 사용하여 ps 실행

특정 프로세스가 특정 사용자로 실행되고 있는지 확인하고 있습니다. 내가 이것을 할 수 있는 이유

ps --no-headers -C command -o user | grep user

꽤 깔끔하지만 인수를 인쇄하려는 경우 약간 보기 흉해집니다(사용자 이름에 대한 grep을 방해할 수 있습니다!).

ps --no-headers -C command -o user,pid,comm | egrep \^user

사용자를 첫 번째 또는 마지막 열로 원하지 않으면 상황이 더 복잡해질 것입니다. PS에서 -C 및 -U 옵션을 다음과 같이 지정할 수 있다면 더 깔끔할 것입니다.

ps --no-headers -C command -U user -o pid

그러나 두 절이 AND가 아닌 OR 역할을 하기 때문에 이는 작동하지 않습니다. 제가 놓친 'ps' 기능이 있나요? 아니면 제가 사용할 수 있는 또 다른 깔끔한 라이너가 있을까요? 건배!

답변1

pgrep다양한 조건을 지원합니다:

pgrep -x -u "user" "command"

인수와도 일치하려면 다음 -x으로 바꾸십시오 . 디스플레이 명령줄에 -f추가합니다 .-l

다음에서 직접 명령줄을 읽을 수도 있습니다 (null로 구분)./proc/PID/cmdline

if pids=$(pgrep -x -u "user" "command"); then
    for pid in $pids; do
        tr "\0" " " < /proc/$pid/cmdline; echo
    done
fi

관련 정보