2009-12-18 29 views
6

Tôi cần tìm số lượng tín hiệu đang chờ xử lý trong hàng đợi tín hiệu của chuỗi trong linux. Có bất kỳ API nào do Linux cung cấp không?cách xác định số lượng tín hiệu đang chờ xử lý trong hàng đợi tín hiệu unix (Linux)

API này cần phải được gọi từ chuỗi, ngoài chuỗi mà chúng tôi đang truy vấn.

sigpending cung cấp API cho chuỗi cuộc gọi. Có API nào, lấy id luồng là arg và cung cấp một số thông tin về các tín hiệu đang chờ xử lý trong hàng đợi.

Mọi trợ giúp đều được đánh giá cao.

Trả lời

3

Tôi không biết API như vậy nhưng đây là giải pháp thay thế: Viết một thư viện nhỏ bao bọc mã tín hiệu. Khi bạn gửi tín hiệu, hãy tăng bộ đếm nguyên tử. Khi bạn xử lý tín hiệu, hãy giảm bộ đếm lần nữa. Sau đó, bạn có thể sử dụng bộ đếm nguyên tử này để trả lời sự tò mò của bạn.

[EDIT] Nếu điều đó là không đủ, thì bạn có nguồn: Chỉ cần kiểm tra mã và cấu trúc dữ liệu có liên quan và sử dụng những gì bạn cần để nhìn vào cấu trúc hạt nhân. Nhưng điều này có thể liên quan đến việc viết một mô-đun (vì các cấu trúc dữ liệu của hạt nhân không thể đọc được bởi một tiến trình) cộng với mã của bạn sẽ trở nên phụ thuộc vào hạt nhân mà nó được biên dịch. Vì vậy, tôi khuyên chống lại cách tiếp cận này.

+2

Đây là những gì tôi đã thấy nhiều nhất để tìm tín hiệu RT đang chờ xử lý (chưa được bảo quản). Những người khác chỉ được kết hợp (theo loại) của hạt nhân anyway, có thể đáng chú ý. 10.000 SIGUSR1 được phân phối dưới dạng 1. –

6

sigpending() trả về bộ tín hiệu đang chờ phân phối cho một chuỗi. Bạn có thể lặp qua sigset_t đó và sử dụng sigismember() để kiểm tra thành viên.

Theo truyền thống, UNIX không xếp hàng nhiều trường hợp của một tín hiệu (theo nghĩa này, chúng tiếp tục "không đáng tin cậy"). Đôi khi bạn có thể nhận được hiệu ứng này với tín hiệu thời gian thực.

Trên Linux, read() ing từ một biển báo sẽ cho phép nhiều hơn một thể hiện của một tín hiệu được đọc cùng một lúc, nếu chúng được xếp hàng đợi.

Các vấn đề liên quan