共有メモリに関連するプロセスのリスト

共有メモリに関連するプロセスのリスト

実行すると、ipcs -m次のメッセージが表示されます。

------ Shared Memory Segments --------
key     shmid      owner  perms  bytes   nattch status
0x00000 38699014   user   700    8125440 2      dest
0x00072 2064391    root   444    1       0
0x00000 38830088   user   700    299112  2      dest
0x00000 38862857   user   700    181720  2      dest
0x00000 38895626   user   700    244776  2      dest
0x00000 38928395   user   700    156816  2      dest

私が望むのは、これらの共有メモリを使用してプロセス(id)を取得することです。どうやって入手できますか?

ベストアンサー1

ipcs -m -pシュミッドを見せてそしてこれを生成したプロセスの PID("cpid")。

また、「最後の演算子」または「lpid」と表示されます。それが何であるかは全くわかりません(マンページにはこれについては記載されていないので、調べるにはドキュメントやソースコードを掘り下げる必要があります。これはクレイジーです。話しています!)。

たとえば、私のシステムの1つ(postgresやapacheなどを実行している場合)で、次のようにします。

$ ipcs -m -p

------ Shared Memory Creator/Last-op PIDs --------
shmid      owner      cpid       lpid      
36         postgres   3155864    2367086   
38         root       14452      2362481   

(apache、pid 14452は所有者のルートとして表示されます。ルートで始まりますが、www-data他のプロセスを事前に分岐すると変更されます。)

これを使用して、コンストラクタawkPIDを抽出し、xargs -n 1 pstree -pそのPIDを表示するPIDツリーにリンクできます。

注:pstree一度に最大1つのPIDパラメータしか使用できないため、xargs -n 1各PIDに対して一度だけ実行する必要があります。pstree

pstree -Aたとえば、(ASCII出力の場合。そうでない場合は、端末で少しきれいに見えるデフォルトの線画文字を使用してください):-A

$ ipcs -m -p | awk '$3 ~ /^[0-9]+$/ {print $3}' | xargs -n 1  pstree  -A -p
postgres(3155864)-+-postgres(1610942)
                  |-postgres(1620056)
                  |-postgres(1761109)
                  |-postgres(1831225)
                  |-postgres(1931537)
                  |-postgres(2123512)
                  |-postgres(2284745)
                  |-postgres(2386392)
                  |-postgres(3155867)
                  |-postgres(3155868)
                  |-postgres(3155869)
                  |-postgres(3155870)
                  |-postgres(3155871)
                  |-postgres(3155872)
                  `-postgres(3159321)
apache2(14452)-+-apache2(141263)
               |-apache2(762459)
               |-apache2(856005)
               |-apache2(856006)
               |-apache2(856008)
               |-apache2(856009)
               |-apache2(856010)
               |-apache2(856438)
               |-apache2(1369957)
               |-apache2(1777646)
               |-apache2(1887781)
               `-apache2(3746760)

必要に応じて、後処理(awkまたは他のツールを使用)して角かっこ内からPIDのみを抽出できます。

ちなみに、出力内容と形式を変更するために使用できるpstreeさまざまな便利なオプション(-ushow uid変換と完全なコマンドライン表示を含む)があります。-a

cpid と lpid の pstree を表示する必要がある場合は、以下を使用します。

$ ipcs -m -p | awk '$3 ~ /^[0-9]+$/ {printf "%s\n%s\n", $3, $4}' | xargs -n 1 pstree -p

おすすめ記事