gpt4 book ai didi

linux - 无法使用 shell 脚本获取进程信息

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:57:09 31 4
gpt4 key购买 nike

我真的是 shell 脚本的新手,我正在尝试获取进程的内存和 cpu 利用率。将来我将从 java 程序运行此脚本,以便我可以利用该 java 程序的所有子进程。我的脚本目前看起来像

#!/bin/bash
# get the process Id of the program executing this shell script
ID=$PPID
echo the process id of the parent of this script is $ID

#fetch the parent of the program which executed this shell
PID=`ps -o ppid=$ID`
echo the grand parent id of the script is $PID

# traverse through all children and collect there memory/cpu utiliation information
for p in `pgrep -P $PID`; do
top -c -n 1 -p $p > /tmp/stat.log
done

现在当我运行这个程序时,我得到以下输出

the process id of the parent of this script is 5331
the grand parent id of the script is 5331 3173 5331 6174
top: bad pid 'Usage:'

top: bad pid 'pgrep'

top: bad pid '[-flvx]'

top: bad pid '[-d'

top: bad pid 'DELIM]'

top: bad pid '[-n|-o]'

top: bad pid '[-P'

top: bad pid 'PPIDLIST]'

top: bad pid '[-g'

top: bad pid 'PGRPLIST]'

top: bad pid '[-s'

top: bad pid 'SIDLIST]'

top: bad pid '[-u'

top: bad pid 'EUIDLIST]'

top: bad pid '[-U'

top: bad pid 'UIDLIST]'

top: bad pid '[-G'

top: bad pid 'GIDLIST]'

top: bad pid '[-t'

top: bad pid 'TERMLIST]'

top: bad pid '[PATTERN]'

有人能帮帮我吗

最佳答案

PID=`ps -o ppid=$ID` should have had a space between `ppid=` and `$ID`.

正确的形式(引用良好的参数并且更喜欢 $() 而不是反引号):

PID=$(ps -o ppid= "$ID")

但这不会删除输出中的前导空格。正如我所建议的,使用阅读:

read PID < <(exec ps -o ppid= "$ID")

或者,如果你愿意,你可以使用 egrep 修剪掉空间:

PID=$(ps -o ppid= "$ID" | egrep -o '\S+')

使用扩展模式匹配对您来说可能很复杂:

shopt -s extglob
PID=$(ps -o ppid= "$ID")
PID=${PID##+([[:blank:]])}

for 行也可以更好地完成:

while read -u 4 P; do
top -c -n 1 -p "$P" > /tmp/stat.log
done 4< <(exec pgrep -P "$PID")

而且我认为您的意思是将输出重定向到 /tmp/stat.log 作为一个 block :

while read -u 4 P; do
top -c -n 1 -p "$P"
done 4< <(exec pgrep -P "$PID") > /tmp/stat.log

关于linux - 无法使用 shell 脚本获取进程信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24787266/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com