/ procで現在実行中のセマフォを取得する方法は?


16

現在セマフォを実行しているプロセスを取得するにはどうすればよい/procですか?SysVIPCサブディレクトリで可能だと思いますが、このコマンドの使用方法がわかりません。

Ubuntu 12.10


1
では/proc/PID/maps、プロセスのメモリマッピングとPOSIXセマフォが添付ファイルとして表示されます/dev/shm。ただし、SysVセマフォについてはわかりません。
lgeorget

@lgeorgetと私は、POSIXセマフォとSysVセマフォの両方が実際に/proc/PID/maps特定のPIDのファイルに表示されることを確認しました。
slm

しかし、明らかに、共有メモリフラグメントもエントリとして表示され/dev/shm、セマフォとはほとんど区別できません(巧妙な名前を持っている場合を除く)。
lgeorget

回答:


21

セマフォと共有メモリを扱う唯一の経験は、コマンドを使用することですipcs。を見てください詳細については ipcsのmanページをご覧ください。

このコマンドは、どのプロセスにセマフォがあるかを示します。

$ ipcs -s

------ Semaphore Arrays --------
key        semid      owner      perms      nsems     
0x4d114854 65536      saml       600        8         

semidがわかっているので、セマフォを持つPIDに関する追加情報を照会できます(8-nsems列があることに注意してください)。

$ ipcs -s -i 65536

Semaphore Array semid=65536
uid=500  gid=501     cuid=500    cgid=501
mode=0600, access_perms=0600
nsems = 8
otime = Sun May 12 14:44:53 2013  
ctime = Wed May  8 22:12:15 2013  
semnum     value      ncount     zcount     pid       
0          1          0          0          0         
1          1          0          0          0         
2          1          0          0          2265      
3          1          0          0          2265      
4          1          0          0          0         
5          1          0          0          0         
6          1          0          0          4390      
7          1          0          0          4390 

pid列はこれらのプロセスです。を使用して検索するかps/procファイルシステムを調べます/proc/<pid>

例えば:

$ more /proc/2265/cmdline 
mono

POSIXおよびSystemV

@lgeorgetによって残されたコメントから構築PID 2265の/proc/2265/mapコンテンツを掘り下げて、次の/dev/shm参照を見つけました。

$ grep shm /proc/2265/maps 
7fa38e7f6000-7fa38ebdf000 rw-s 00000000 00:11 18517                      /dev/shm/mono-shared-500-shared_fileshare-grinchy-Linux-x86_64-40-12-0
7fa38f0ca000-7fa38f0cb000 rw-s 00000000 00:11 18137                      /dev/shm/mono.2265
7fa3967be000-7fa3967d3000 rw-s 00000000 00:11 18516                      /dev/shm/mono-shared-500-shared_data-grinchy-Linux-x86_64-328-12-0

私の知る限り、System Vセマフォ(で取得するものsemget(2))のみが表示されるipcs -sため、POSIXセマフォ(で取得するものsem_open(2))を使用している場合は、別の方法を使用する必要があります。
lgeorget

sem_open(2)の種類を返す端末コマンドを知っていますか?ちょっと興味があるんだけど。セマフォについて私が知っていることはすべて、上記の答えにあります8-)。
slm

いいえ、それが問題です。;)ipcsマンページが言うように:「Linux ipcsユーティリティはPOSIX ipcsユーティリティと完全に互換性がありません。」だから、彼らがPOSIX IPCのために何かを考えているかどうかはわかりません。おそらくipcs:)の将来のリリース。
lgeorget

の内容mapはどちらもさまざまなセマフォと考えられていますか?
slm

たぶんそうだ。何らかの方法で、セマフォはプロセスメモリのどこかに接続する必要があります。しかし、SysVセマフォがpseudo-filesystemにも作成されているかどうかはわかりませんでした/dev/shm。今、答えがあります。:)
lgeorget
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.