Làm thế nào để có được các công cụ hiện đang chạy semaphores bằng / Proc?


16

Tôi tự hỏi làm thế nào để có được các quy trình hiện đang chạy semaphores bằng cách /proc? Tôi đoán là có thể bởi thư mục con SysVIPC. Nhưng tôi không biết cách sử dụng các lệnh này.

Ubuntu 12.10


1
Trong /proc/PID/maps, bạn có thể thấy ánh xạ bộ nhớ của một quá trình và các ngữ nghĩa POSIX hiển thị dưới dạng các tệp đính kèm /dev/shm. Tôi không chắc chắn về semaphores SysV mặc dù.
lgeorget

@lgeorget và bản thân tôi đã xác nhận rằng cả hai ngữ nghĩa POSIX và SysV trên thực tế đều hiển thị trong /proc/PID/mapstệp cho một PID nhất định.
slm

Nhưng rõ ràng, các đoạn bộ nhớ được chia sẻ cũng hiển thị dưới dạng các mục nhập /dev/shmvà chúng không thể phân biệt được với các từ ngữ nghĩa (trừ khi chúng có tên thông minh).
lgeorget

Câu trả lời:


21

Kinh nghiệm duy nhất của tôi trong việc xử lý các semaphores và bộ nhớ chia sẻ là thông qua việc sử dụng lệnh ipcs. Hãy xem trang người đàn ông ipcs để biết thêm chi tiết.

Lệnh này cho bạn thấy các quá trình có semaphores:

$ ipcs -s

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

Với semid đã biết, chúng ta có thể truy vấn để biết thêm thông tin về các PID có semaphores (lưu ý có 8 - cột 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 

Cột pid là những quá trình này. Bạn có thể tra cứu chúng bằng cách sử dụng pshoặc xem qua /prochệ thống tệp , /proc/<pid>.

Ví dụ:

$ more /proc/2265/cmdline 
mono

POSIX & SystemV

Xây dựng một bình luận để lại bởi @lgeorget Tôi /proc/2265/mapđã tìm hiểu nội dung của PID 2265 và đã tìm thấy các /dev/shmtài liệu tham khảo sau :

$ 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

Theo như tôi biết, chỉ các semaphores System V (những cái bạn nhận được semget(2)) mới hiển thị ipcs -snên nếu bạn đang sử dụng các semaphores POSIX (những cái bạn có với sem_open(2)), bạn phải sử dụng một phương pháp khác.
lgeorget

Bạn có biết bất kỳ lệnh đầu cuối nào sẽ trả về giống sem_open (2) không? Chỉ tò mò thôi. Tất cả mọi thứ tôi biết về semaphores đều có trong câu trả lời ở trên 8-).
slm

Không, đó là vấn đề. ;) Như ipcsmanpage nói: "Tiện ích ipc của Linux không tương thích hoàn toàn với tiện ích iIX POSIX." Vì vậy, tôi không chắc họ thậm chí đã nghĩ ra một cái gì đó cho POSIX IPC. Có lẽ một bản phát hành trong tương lai ipcs:).
lgeorget

Nội dung của mapcả hai loại semaphores nghĩ, đúng không?
slm

Tôi đoán vậy. Bằng cách này hay cách khác, semaphores phải được gắn ở đâu đó trong bộ nhớ tiến trình. Nhưng tôi không chắc các semaphores SysV cũng được tạo ra trong hệ thống tập tin giả /dev/shm. Bây giờ, chúng tôi có câu trả lời. :)
lgeorget
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.