2013-06-23 12 views
7

Dokumentacja dla bloku interruptionHandler z NSXPCConnection stanów:Czy procedura obsługi przerwań XPC jest wywoływana, gdy launchd zabija proces?

obsługi przerwania, które jest uruchamiane w przypadku zdalnych wyjść procesowych lub awarii.

Jednak Daemons and Services Programming Guide stany:

usługi XPC są zarządzane przez launchd, który uruchamia je na żądanie, ponownie uruchamia je w razie awarii, a kończy je (poprzez wysłanie SIGKILL), gdy są one w stanie bezczynności. Jest to niewidoczne dla aplikacji korzystającej z usługi, z wyjątkiem przypadku usługi, która ulega awarii podczas przetwarzania komunikatu wymagającego odpowiedzi. W takim przypadku wniosek może zobaczyć, że jej związek XPC stał się nieważny, aż usługa zostanie wznowiona przez launchd

Jeśli proces XPC ginie na bezczynności, dostanę wywołania zwrotnego w moim interruptionHandler? Czy otrzymam tylko wywołanie zwrotne, gdy aplikacja ulegnie awarii podczas przetwarzania wiadomości? Pytam, ponieważ ten przypadek testowy wydaje się niemożliwy do symulacji. Cykl obsługi usług XPC to niestety bardzo czarna skrzynka.

+0

Czy dowiedziałeś się, co robi? Wysyłanie SIGKILL ręcznie wywołuje procedurę obsługi przerwania. – ctietze

Odpowiedz

2

Tak, obsługa przerwania zostanie wywołana, jeśli launchd zatrzyma usługę na czas bezczynności.

Można to symulować, wykorzystując naturalną reakcję wywołaną przez presję pamięci: zatrzymanie wszystkich uruchomionych uruchomionych usług, które są bezczynne, aby pomóc w rozwiązaniu problemu.

Symulowany ostrzec poziom ciśnienia pamięci powinno wystarczyć, oto jak to zrobić:

sudo memory_pressure -S -l warn 

I krytyczny:

sudo memory_pressure -S -l critical 

Warunek ten jest często pomijane podczas testowania XPC Services. Zaleca się jednak, aby usługi XPC miały status bezpaństwowców, więc w większości przypadków nie powinno mieć znaczenia, czy usługa jest zatrzymywana i można ją ponownie uruchomić, uruchamiając przy następnym wysyłaniu wiadomości. Idealnie unieważniłeś połączenie, kiedy robiłeś to ostatnio.

Launchd nie zatrzyma usługi XPC z powyższymi warunkami, jeśli trwa transakcja XPC (czytaj: trwa przetwarzanie wiadomości i/lub blok odpowiedzi nie został wywołany).

Powiązane problemy