Если бы я запустил сценарий оболочки с помощью AuthorizationExecuteWithPrivileges, это был бы самый простой способ убить сценарий и любые другие процессы, которые он порождал.
Благодарность
3 ответа
Он работает как root, поэтому вы не можете убить его из обычного пользовательского процесса. Вам нужно будет вежливо попросить его выйти самостоятельно.
Используйте канал связи, который AuthorizationExecuteWithPrivileges()
возвращает по ссылке в своем последнем аргументе, FILE **communicationPipe
, для отправки сообщения дочернему процессу, который просит его удалить себя и его потомков. Затем он может убить себя и всех своих потомков, используя kill(0, SIGINT)
или, если требуются более решительные меры, SIGKILL
.
Сообщение, которое вы используете, может быть таким же простым, как закрытие файла, пока ребенок ожидает закрытия файла; в этот момент он знает, что вы закончили с ним разговаривать, и пора убрать себя.
Есть некоторые предостережения в отношении потомков, которые фактически получат это сообщение, для чего см. Справочную страницу kill(
2 )
. Предостережения в основном не будут иметь значения, если процесс, который вы запустили через AEWP, не потерял привилегий, хотя одна неявная проблема заключается в том, что этот подход не будет работать, если какие-либо дочерние процессы поместили себя в новую группу процессов.
У Apple есть образец кода a>, который использует stdout для передачи PID обратно вызывающей стороне.
Похожие вопросы
Новые вопросы
objective-c
Этот тег следует использовать только для вопросов, касающихся функций Objective-C или зависящих от кода на языке. Теги [cocoa] и [cocoa-touch] следует использовать, чтобы узнать о фреймворках или классах Apple. Используйте связанные теги [ios], [macos], [apple-watch] и [tvos] для проблем, характерных для этих платформ.