Bashスクリプト(Javaプロセス)からPIDのリストを取得し、対応するコマンドライン引数を解析して、各PIDが対応するサーバーインスタンスを確認する必要があります。
現在、私はsed / cutを使用してこれを行います。
PARGS=$(pargs -l $PID)
PARGS_ARR=($PARGS)
NODE='UNKNOWN'
for ARG in ${PARGS_ARR[@]}
do
# trim single quotes
ARG=$(echo $ARG | sed "s/'//g")
# split by equals sign
ARGL=$(echo $ARG | cut -f1 -d=)
ARGR=$(echo $ARG | cut -f2 -d=)
if [ "$ARGL" == "-DnodeId" ]; then
NODE=$ARGR
fi
done
ただし、多数のコマンドラインパラメータ(PIDあたり約20〜30個)のため、非常に遅く実行されます。
どういうわけか、コマンドライン引数を解析し、単一のコマンドを使用して解析されたキー=>値を取得する方法はありますか?
ベストアンサー1
出力はどのようpargs -l $PID
に見えますか?コードでは、次の形式のすべてのコマンドライン引数を含む1行として表示されます。
arg1=val1 arg2=val2
-DnodeId
その場合は、次のコマンドを使用してパラメータ値を収集できますsed
。
$ ARGS="-DfirstArg=foo -DanotherArg=bar -DnodeId=1234 -DlastArg=baz"
$ echo "$ARGS" | sed -r 's/.*-DnodeId=([^ ]+).*/\1/g'
1234
したがって、スクリプトは次のようになります。
PARGS=$(pargs -l $PID)
NODE='UNKNOWN'
if [ -n "$(grep "DnodeId" <(echo "$PARGS"))" ]; then
NODE=$(echo "$PARGS" | sed -r 's/.*-DnodeId=([^ ]+).*/\1/g')
fi