Чтобы быть чистым, процесс XPC прекратится, когда родительское приложение завершит работу. По крайней мере, моя. Ваш вопрос: как его убить до этого?
Это просто: просто позвоните exit(0)
в свой процесс XPC сразу же после того, как он вызывает обработчик завершения, который отправляет результат обратно в родительское приложение. I необходимо было сделать, чтобы сделать это в прошлом месяце, потому что в процессе XPC была использована частная инфраструктура Apple, и выход из нее был единственным способом, которым я мог бы остановиться, чтобы остановить некоторые нежелательные и необъяснимые (поскольку у меня нет документации на частном рамочный) побочный эффект.
Однако, после выхода из этого процесса XPC, я обнаружил, что, как это ни странно, он продолжал работать в течение нескольких миллисекунд, и если мое родительское приложение открыло другое соединение с этой же службой XPC, тем временем, обреченный XPC-процесс будет принимать новое соединение непосредственно перед убийством, оставив родительское приложение висящим. Я на самом деле видел это несколько раз.
Итак, следующий вопрос: Должен ли вы убить его только потому, что хотите быть приятным? Я думаю, что ответ нет, в соответствии со следующей цитатой из Daemons and Services Programming Guide > Creating XPC Services
XPC услуг компании Apple управляет запуском программ, который запускает их по требованию, перезапускает их, если они терпят крах, и прекращает их (путем отправки SIGKILL) , когда они простаивают.
Подводя итог: просто аннулируйте свои соединения, когда это будет сделано, и пусть начнет беспокоиться об убийстве. Кроме того, не задерживайте дыхание. У меня было приложение, работающее в течение последних двух часов, и процесс XPC, последнее соединение, закрытое два часа назад, все еще работает.