Как отправить сигнал, используя kill в приложении MacOS Swift? - PullRequest
2 голосов
/ 12 апреля 2020

У меня есть проект приложения XCode MacOS в Swift. Мне нужно отправить сигнал другому процессу. Вызов функции kill(pid_t, Int32) не работает. Мой процесс-приемник не получает никакого сигнала. Также я попытался вызвать bash код из swift, используя Process:

let task = Process()
task.launchPath = "/usr/bin/env"
task.arguments = ["kill", "-s", "SIGUSR1", receiverID]
task.launch()
task.waitUntilExit()
return task.terminationStatus

Но я получил ошибку в консоли kill: 6340: Operation not permitted.

Не могли бы вы мне помочь? Как я могу отправить сигнал другому процессу?

1 Ответ

0 голосов
/ 14 апреля 2020

Повышение привилегий описано в: Документация по контролю доступа Apple для обеспечения безопасности

Однако, если вы порождаете исходный подпроцесс из приложения, используя NSTask (Process в Swift, спасибо Apple!), это должен быть ребенок, и вы должны быть в состоянии убить его. Если вы запускаете его, используя NSTask, чтобы вызвать его, вы должны иметь возможность взять возвращенный экземпляр Process и вызвать метод terminate(), чтобы убить его.

Таким образом, если вы порождая своего первоначального ребенка, используя код, похожий на исходный пост (в результате чего Process экземпляр называется task), вы сможете вызвать task.terminate(), чтобы завершить процесс.

...