Linux pid について 1 つ質問があります。1つの同じグループでpidを取得するには? Linux では「ps」コマンドですべての pid または pgid を取得するのは簡単に思えますが、同じグループに属する pid を取得する方法、つまり同じプログラムの pid を取得する方法を教えてください。誰でもこれについて助けてください。ありがとうございました!
質問する
17969 次
4 に答える
7
からman ps
To print a process tree:
ps -ejH
ps axjf
pstree
助けることもできます
更新:pidof
指定されたプログラムのプロセスpidを検索するために使用します。たとえばpidof chrome
、すべてのクロムpidを取得します。
于 2012-10-23T20:41:39.450 に答える
0
この目的のために小さなスクリプトを書きました。
コード
#!/bin/bash
MY_GROUP_ID=$1
A="$(ps -e -o pgid,pid= | grep [0-9])"
#printf "$A\n"
IFS=$'\n'
for i in $A; do
GROUP_ID=$(printf "$i" | awk -F ' ' '{print $1}')
PID=$(printf "$i" | awk -F ' ' '{print $2}')
if [ "$GROUP_ID" = "$MY_GROUP_ID" ]; then
printf "$PID\n"
fi
done
unset IFS
使用法
./test_script.sh (group ID you want to select for)
説明
- いくつかの Linux ユーティリティを既に知っていると仮定しています。これは、bash シェル専用に書かれています。
ps -e -o pgid,pid=
各行の最初の値がグループ ID で、2 番目の値がプロセス ID であるすべてのプロセスをスペースで区切って単純に出力します。grep
不要なヘッダー行を削除します。- IFS は非常に重要な内部変数です。これが行うことは、文字列がどのように区切られるかを規制することです。コンストラクトは
for
空白文字を使用して文字列を自動的に区切りますが、IFS 変数が改行に設定されている場合、この新しい空白文字を使用して区切ります。これにより、各反復変数が からの行であることが保証されA
ます。 - 各行について
awk
、最初の値 (これはグループ ID) と 2 番目の値 (これは PID) を取得するために使用します。 - グループ ID が必要なものと一致する場合は、対応する PID を出力します。
- 完了したら、IFS をデフォルト値に設定解除して、変更された状態が長引かないようにする必要があります。
備考
それが役立つことを願っています。わたしにはできる。awk と ps がどのように機能するかを理解すれば、それほど複雑ではありません。残りは解析するだけです。PID を新しい行として出力するのではなく、配列として渡したい場合は、別のものを使用して区切り、すべての PID を保持するグローバル文字列変数を作成します。
于 2013-11-22T04:04:14.467 に答える