Bash 스크립팅으로 PID 표시

Bash 스크립팅으로 PID 표시

모두 좋은 하루 되세요,

Java의 모든 프로세스를 표시하는 bash 스크립트를 작성하려고 하는데 아래 방식으로 표시하고 싶습니다.

 ps -p $PID -o pid,vsz=MEMORY -o user,group=GROUP -o comm,args=ARGS

위의 문제는 하나의 특정 PID만 표시한다는 것입니다.

ps aux|grep j\[a\]va그래서 각각의 PID를 얻은 다음 위 명령에서 각 PID를 실행하고 싶습니다 .

결과:

 root@reinhardt-VirtualBox:/home/reinhardt# ps -p 1959 -o pid,vsz=MEMORY -o user,group=GROUP -o comm,args=ARGS
  PID MEMORY USER     GROUP    COMMAND         ARGS
 1959  13648 root     root     grep            grep --color=auto java

for 루프처럼 어떤 종류의 루프가 만들어질 것 같나요?

답변1

이것을 테스트할 수 있는 곳은 아니지만 작동할 것입니다. read쉘 스크립팅의 표준 부분으로, stdin(스트림 또는 /dev/tty와 같은 장치일 수 있음)의 내용을 변수에 배치합니다. 그런 다음 잠시 루프를 수행하면 됩니다.

ps auwwx | gawk '/[j]ava/{print $1}' | while read PID
do
    ps -p $PID -o pid,vsz=MEMORY -o user,group=GROUP -o comm,args=ARGS
done

또는 더 간단하게, UNIX에 pgrep이 있는 경우:

pgrep java | while read PID
do
    ps -p $PID -o pid,vsz=MEMORY -o user,group=GROUP -o comm,args=ARGS
done

xargs가끔 이런 경우에 사용할 수 있습니다 . 기본적으로 xargs는 명령 끝에 인수 그룹을 배치한다는 점을 기억하십시오. 따라서 한 번에 하나씩(-n1 사용) 공급하고 -i를 사용하여 원하는 위치에 PID를 배치해야 합니다.

pgrep java | xargs -n1 -i{} ps -p {} -o pid,vsz=MEMORY -o user,group=GROUP -o comm,args=ARGS

(-i 구문이 잘못되었다면 사과드립니다. 지금은 테스트할 수 없습니다. 문제가 발생하면 맨페이지를 확인하세요.)

관련 정보