2013-06-23 30 views
7

Các tài liệu cho interruptionHandler khối NSXPCConnection trạng thái:Trình xử lý gián đoạn XPC có được gọi khi launchd giết quá trình không?

Một handler gián đoạn đó được gọi là nếu thoát quá trình từ xa hoặc tai nạn.

Tuy nhiên, Daemons and Services Programming Guide trạng thái:

dịch vụ XPC được quản lý bởi launchd, mà ra mắt họ theo yêu cầu, khởi động lại chúng nếu gặp sự cố và kết thúc họ (bằng cách gửi SIGKILL) khi họ đang nhàn rỗi. Điều này minh bạch đối với ứng dụng sử dụng dịch vụ, ngoại trừ trường hợp dịch vụ gặp sự cố khi xử lý thông báo yêu cầu phản hồi. Trong trường hợp đó, việc áp dụng có thể thấy rằng kết nối XPC của nó đã trở thành không hợp lệ cho đến khi dịch vụ được khởi động lại bởi launchd

Nếu một quá trình XPC bị giết vì nhàn rỗi, tôi sẽ nhận được một cuộc gọi lại trong interruptionHandler của tôi? Hoặc tôi sẽ chỉ nhận được cuộc gọi lại khi ứng dụng gặp sự cố khi xử lý tin nhắn? Tôi hỏi vì trường hợp thử nghiệm này có vẻ như không thể mô phỏng. Vòng đời dịch vụ XPC không may là một hộp đen rất.

+0

Bạn đã phát hiện ra điều đó? Việc gửi SIGKILL theo cách thủ công sẽ gọi trình xử lý ngắt. – ctietze

Trả lời

2

Có trình xử lý ngắt sẽ được gọi nếu launchd ngừng dịch vụ ở chế độ chờ.

Điều này có thể được mô phỏng bằng cách tận dụng launchd phản ứng tự nhiên phải áp lực bộ nhớ: dừng tất cả các dịch vụ khởi chạy được khởi chạy không hoạt động để giúp giải quyết vấn đề.

Một mô phỏng cảnh báo mức độ áp lực bộ nhớ nên là đủ, đây là cách bạn làm điều đó:

sudo memory_pressure -S -l warn 

Và đối quan trọng:

sudo memory_pressure -S -l critical 

Tình trạng này thường được bỏ qua khi thử nghiệm dịch vụ XPC. Tuy nhiên, các dịch vụ XPC được đề xuất được thiết kế là không trạng thái, vì vậy trong hầu hết các trường hợp, dịch vụ của bạn sẽ bị dừng và có thể được khởi động lại bằng cách khởi chạy vào lần tiếp theo bạn gửi tin nhắn. Và lý tưởng là bạn đã vô hiệu hóa kết nối khi bạn được thực hiện lần cuối với nó.

Launchd sẽ không dừng dịch vụ XPC với các điều kiện trên nếu có giao dịch XPC đang diễn ra (đọc: tin nhắn đang được xử lý và/hoặc khối trả lời chưa được gọi).

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