알아요 pwdx
. 하지만 PWD가 표시되면 좋을 것 같습니다 top
. 즉, PWD와 CPU/mem 사용량을 나란히 보고 싶습니다. top
/의 출력 ps
과 주기적인 새로 고침을 pwdx
결합 하는 스크립트나 한 줄짜리 스크립트를 갖고 있는 사람이 있나요 ?
답변1
내 괴짜 솔루션은 다음과 같습니다.
ps --no-headers -e -o pid,%cpu,%mem,args | grep -v "ps --no-headers" > ps.txt && awk '{ print $1 }' ps.txt > pids.txt && cat pids.txt | xargs pwdx | cut -d ' ' -f 2 > pwd.txt && awk '{ print " "$1" "$2" "$3" "}' ps.txt > ps1.txt && cut -d ' ' -f 4- ps.txt > ps2.txt && paste ps1.txt pwd.txt ps2.txt
파일을 쓰지 않아도 괜찮나요? 아니면 일반적으로 악몽이 덜한가요?
답변2
나는 그것을 덜 악몽처럼 만들 수 있었습니다.
#!/bin/bash
ps --no-headers -e -o pid,%cpu,%mem,args > ps_out.txt
awk '!/--no-headers/ { print $1 }' ps_out.txt | tee pids.txt | xargs pwdx 2>/dev/null > paths.txt
sed --in-place 's/://' paths.txt
awk 'FILENAME=="paths.txt" {pids[$1][0]=$2} FILENAME=="ps_out.txt" { pid=$1; $1=""; $0=$0; pids[pid][1]=$0} END {for( pid in pids ) {print pid, pids[pid][1], pids[pid][0]} }' paths.txt ps_out.txt
rm pids.txt paths.txt ps_out.txt
awk
이 스크립트를 더 읽기 쉽게 만들려면 다음을 수행하세요 .
FILENAME=="paths.txt" {
pids[$1][0]=$2
}
FILENAME=="ps_out.txt" {
pid=$1;
$1="";
$0=$0;
pids[pid][1]=$0
}
END {
for( pid in pids ) {
print pid, pids[pid][1], pids[pid][0]
}
}