2013-01-23 25 views
5

Tôi đang tìm cách giám sát trạng thái của một trong các ứng dụng của tôi trên OS X. Có một số thành phần mà tôi cần theo dõi như trạng thái của các kênh truyền thông khác nhau. Nếu họ đi xuống, quá trình giám sát sẽ có thể cảnh báo người dùng cả trên màn hình và thông qua một thông báo đẩy.Làm cách nào để theo dõi quá trình trên OS X?

Dịch vụ XPC trông đầy hứa hẹn, nhưng nếu ứng dụng gặp sự cố, tôi cho rằng điều này cũng sẽ đưa ra dịch vụ hoặc tôi nhầm?

Giải pháp ưa thích của tôi là một thứ mà cũng sẽ giám sát để chấm dứt đột xuất và khởi động lại ứng dụng nếu điều đó xảy ra.

Cách tốt nhất để làm điều này là gì?

Trả lời

0

Nếu mỗi quá trình chạy theo chủ đề riêng của nó, bạn có thể chạy một chương trình giám sát để theo dõi xem các luồng có còn hoạt động hay không. Một tập lệnh chạy ps trong một vòng lặp và phân tích cú pháp đầu ra có thể thực hiện.

Bạn có thể thấy các tùy chọn khác nhau here. Xem ví dụ -C để chọn theo tên lệnh và -m để hiển thị tất cả các chuỗi.

1

Bạn có thể viết một ứng dụng khởi động ứng dụng chính của bạn như là một tiến trình con và đợi nó thoát. Nó có thể kiểm tra mã thoát, và sau đó phản ứng theo nhu cầu của bạn.

Cách tiếp cận này được giải thích ở đây: https://stackoverflow.com/a/78095/785411

Để fork() một số quá trình giám sát để chạy ứng dụng chính của bạn như là một quá trình con, điều này được giải thích ở đây: https://stackoverflow.com/a/4327062/785411

1

Tôi nghĩ rằng bạn có thể có thể tận dụng xây dựng trong các cơ sở Launchd và CrashReporter để đạt được yêu cầu của bạn.

Launchd là người giám sát hệ thống OS X dự định khởi chạy và theo dõi các quy trình nền và thường được sử dụng để chạy các dịch vụ XPC. Các tác nhân khởi chạy có thể phản ứng với các sự kiện hệ thống khác nhau và có thể được định cấu hình để khởi động lại các quy trình trong trường hợp xảy ra sự cố (được chỉ định qua khóa KeepAlive/SuccessfulExit trong)

Launchd có thể được đặt để phản ứng với các sự kiện hệ thống khác nhau dưới dạng sự kiện khởi chạy, bao gồm các tệp và thư mục theo dõi, thời gian đã lên lịch hoặc nghe kết nối mạng.

CrashReporter là cơ sở hệ thống OS X bắt và ghi lại tất cả các sự cố trong quá trình. Nó ghi lại thông qua AppleSystemLogger facility và có thể được truy cập bằng các công cụ nhật ký hệ thống như được ghi trong TechNote được liên kết. Trên Mountain Lion, báo cáo sự cố trong quá trình người dùng kết thúc trong ~/Library/DiagnosticReports/, với một cặp tệp bị hỏng và tệp plist được tạo cho mỗi sự kiện sự cố. Tôi nghĩ rằng bạn có thể sử dụng các tính năng này theo một vài cách để đạt được yêu cầu của bạn, nếu launchd chịu trách nhiệm chạy các dịch vụ xpc, nó có thể có trách nhiệm khởi động lại chúng trên các sự kiện sự cố và chúng có thể được tách ra khỏi bất kỳ ứng dụng nào sự cố.

Bạn có thể viết tác nhân khởi chạy phản hồi sự cố tai nạn bằng cách truy cập thư mục báo cáo sự cố (ví dụ: sử dụng thuộc tính QueueDirectories) cho nhật ký mới và khởi chạy lại ứng dụng của bạn hoặc hiển thị thông báo.

2

Tôi nghĩ rằng các kênh truyền thông giám sát, vv phải được thực hiện bởi từng thành phần cụ thể (quy trình).Và nếu lỗi không mong muốn xảy ra, thành phần đó sẽ thoát ngay lập tức để đảm bảo dọn dẹp hợp lý.

Đối với giám sát processe, dưới đây của Apple kỹ thuật Q & Một tài liệu sẽ thực sự hữu ích:
Technical Note TN2050: Observing Process Lifetimes Without Polling

+0

+1 để tham khảo hữu ích cho Apple Tech Lưu ý! – Floris

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