모두 좋은 하루 되세요,
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 구문이 잘못되었다면 사과드립니다. 지금은 테스트할 수 없습니다. 문제가 발생하면 맨페이지를 확인하세요.)