4

Linux pid について 1 つ質問があります。1つの同じグループでpidを取得するには? Linux では「ps」コマンドですべての pid または pgid を取得するのは簡単に思えますが、同じグループに属する pid を取得する方法、つまり同じプログラムの pid を取得する方法を教えてください。誰でもこれについて助けてください。ありがとうございました!

4

4 に答える 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)

説明

  1. いくつかの Linux ユーティリティを既に知っていると仮定しています。これは、bash シェル専用に書かれています。
  2. ps -e -o pgid,pid=各行の最初の値がグループ ID で、2 番目の値がプロセス ID であるすべてのプロセスをスペースで区切って単純に出力します。
  3. grep不要なヘッダー行を削除します。
  4. IFS は非常に重要な内部変数です。これが行うことは、文字列がどのように区切られるかを規制することです。コンストラクトはfor空白文字を使用して文字列を自動的に区切りますが、IFS 変数が改行に設定されている場合、この新しい空白文字を使用して区切ります。これにより、各反復変数が からの行であることが保証されAます。
  5. 各行についてawk、最初の値 (これはグループ ID) と 2 番目の値 (これは PID) を取得するために使用します。
  6. グループ ID が必要なものと一致する場合は、対応する PID を出力します。
  7. 完了したら、IFS をデフォルト値に設定解除して、変更された状態が長引かないようにする必要があります。

備考

それが役立つことを願っています。わたしにはできる。awk と ps がどのように機能するかを理解すれば、それほど複雑ではありません。残りは解析するだけです。PID を新しい行として出力するのではなく、配列として渡したい場合は、別のものを使用して区切り、すべての PID を保持するグローバル文字列変数を作成します。

于 2013-11-22T04:04:14.467 に答える