pgrep에 전체 프로세스 정보를 표시하는 방법


26

pgrep각 프로세스에 대한 모든 정보를 제공 할 수있는 방법 ps이 있습니까? 나는 ps통과 할 수 있다는 것을 알고 grep있지만 많은 타이핑이 필요하며 grep원하지 않는 프로세스 자체 도 제공합니다 .

답변:


22

pgrep의 출력 옵션은 꽤 제한적입니다. ps중요한 정보를 얻으려면 정보를 다시 보내야합니다 . 에서 bash 함수를 사용하여이를 자동화 할 수 있습니다 ~/.bashrc.

function ppgrep() { pgrep "$@" | xargs --no-run-if-empty ps fp; }

그런 다음 명령을 호출하십시오.

ppgrep <pattern>

2
감사! 수정했습니다. function ppgrep() { pgrep "$@" | xargs ps fp 2> /dev/null; } 그렇지 않으면 검색과 일치하는 프로세스가 없으면 전체 ps사용 메밀 라가 덤프 됩니다.
JoelFan

OS X ps에서 플래그에는 하이픈 이 필요합니다.function ppgrep() { pgrep "$@" | xargs ps -fp 2> /dev/null; }
Erik Nomitch

1
ps 사용법 페이지를 피하려면 GNU xargs에 옵션 -r이 있으며, 목록을받은 경우에만 명령을 실행합니다.
Doug

1
더 간결한 방법은ps fp $(pgrep -d, "$@")
Igor Mikushkin

14

결합 pgrepps사용 xargs!

pgrep <your pgrep-criteria> | xargs ps <your ps options> -p

예를 들어보십시오

pgrep -u user | xargs ps -f -p

의 전체 프로세스 목록을 얻으려면 user.

첫 번째 줄을 열 이름으로 유지하는 것이 좋습니다. grep항상 열 이름을 삭제합니다.


우수한! 이것은 xfvb에 대한 arcgis 서버 시작 스크립트의 이상한 문제를 해결합니다
prusswan

적절한 방법으로 유닉스 파이프를 사용하고 하나의 도구에서 PID 목록을 가져 와서 다른 도구로 다시 공급하기 때문에 받아 들일만한 대답이어야합니다. Bash 함수 ppgrep ()은 불필요한 의존성이며 여기에 제시된 학습 기회에 직면하지 않습니다.)
Scott Prive

10

다음은 PID + 전체 명령 줄 만 제공합니다. "모든 정보 ps가하는"다른 답변보기 ...

대부분의 리눅스는 procps-ng를 사용 합니다. 2012 년에 출시 된 3.3.4 이후 pgrep -a( --list-full)는 전체 명령 줄을 보여줍니다.
참고 : 기본적으로 pgrep은 실행 파일 이름에 지정한 패턴 만 일치합니다. greps ps와 같이 전체 명령 행과 일치 시키려면 -f( --full) 옵션을 추가하십시오 .

이전 버전 (원래 procps 프로젝트 포함)에서 -l옵션에 정보가 표시되었지만 동작은 다양합니다.

  • pgrep -fl 전체 명령 행과 패턴을 일치시키고 전체 명령 행을 표시했습니다.
  • pgrep -l단독으로 실행 파일 이름 만 일치하고 실행 파일 이름 만 표시했습니다.
    전체 일치를 원하지 않으면 전체 명령 줄을 볼 수 없습니다 :-( [ https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=526355#15 ]

* BSD가 어떤 코드를 사용하는지는 모르지만 매뉴얼 페이지 에 이전 -fl동작이 기록되어 있습니다.

불행히도 -fl최근 procps-ng에서 -f( --list-name)는 이식 가능하게 사용할 수 없으며 항상 실행 파일 이름 만 인쇄합니다.


4

리눅스

GNU 버전의 pgrep경우 -i(대 / 소문자 구분 안함)는 지원되지 않으며 long + fuzzy 출력은을 통해 달성됩니다 -af.

$ pgrep -af apache

OUTPUT:
    1748 /usr/sbin/apache2 -k start

맨 페이지 :

   -a, --list-full
       List  the  full  command line as well as the process ID.  (pgrep only.)

   -f, --full
       The pattern is normally only matched against the process name.  
       When -f is set, the full command  line is used.

맥 OS

OSX (및 추론에 의해, BSD에서) -l( long output )과 -f( full argument list와 일치 )와 함께 완전한 명령이 표시됩니다 ( -i대 / 소문자 구분 안함).

$ pgrep -fil ssh

OUTPUT:
    33770 ssh: abc@192.168.0.123-22 [mux] t

man 페이지 :

 -l          Long output.  For pgrep, print the
             process name in addition to the
             process ID for each matching
             process.  If used in conjunction
             with -f, print the process ID and
             the full argument list for each
             matching process.  For pkill, dis-
             play the kill command used for
             each process killed.

1

grep -v 옵션을 사용하면 요청 된 패턴을 모두 반환합니다.

ps -ef | grep <process> | grep -v grep

이것이 저에게 가장 좋은 대답이었습니다. 그와 공교롭게도이 잘리지 않고 당신에게 전체 명령을 보여줍니다pgrep -u user | xargs ps -f -p
BringBackCommodore64

0

나는 pgrep에 -l 옵션을 사용하여 이름과 프로세스 ID를 얻을 수 있다고 생각합니다.

ps는 모든 종류의 포맷 옵션을 지원하므로 입력 내용을 저장하려는 별칭을 만들 것입니다. grep 프로세스를 출력에서 ​​제외하는 간단한 방법은 grep 프로세스를 제외하기위한 추가 파이프를 포함하도록 grep -v grep합니다.



-1

이것은 내가 당신을 추측하는 데 도움이 될 것입니다 :

추신


2
자세히 설명해 주시겠습니까? 자세한 정보는이 답변을 개선 할 것입니다
Dave M
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.