Если бы я запустил сценарий оболочки с помощью AuthorizationExecuteWithPrivileges, это был бы самый простой способ убить сценарий и любые другие процессы, которые он порождал.

Благодарность

1
indragie 26 Авг 2009 в 20:13

3 ответа

Лучший ответ

Он работает как root, поэтому вы не можете убить его из обычного пользовательского процесса. Вам нужно будет вежливо попросить его выйти самостоятельно.

3
Peter Hosey 26 Авг 2009 в 21:10
Спасибо, как я могу попросить его закрыть? Думаю, я всегда мог бы использовать другую команду «AuthorizationExecuteWithPrivileges», чтобы убить его, но пользователю было бы очень неудобно вводить пароль администратора, чтобы закрыть процесс ...
 – 
indragie
26 Авг 2009 в 21:49
Да, было бы. Вы бы использовали любую форму IPC.
 – 
Peter Hosey
27 Авг 2009 в 00:03
Извините за мое незнание, но что такое IPC? Я исследовал это, но это может означать много разных вещей. Спасибо
 – 
indragie
27 Авг 2009 в 22:14
Межпроцессного взаимодействия. Один из способов высокого уровня - это распределенные объекты (developer.apple.com/documentation/Cocoa/ Концептуальные / DistrObjects); низкоуровневый способ - это порты Маха, а еще более примитивный способ (если не совсем нижний уровень) - сокеты домена UNIX.
 – 
Peter Hosey
27 Авг 2009 в 22:57

Используйте канал связи, который AuthorizationExecuteWithPrivileges() возвращает по ссылке в своем последнем аргументе, FILE **communicationPipe, для отправки сообщения дочернему процессу, который просит его удалить себя и его потомков. Затем он может убить себя и всех своих потомков, используя kill(0, SIGINT) или, если требуются более решительные меры, SIGKILL.

Сообщение, которое вы используете, может быть таким же простым, как закрытие файла, пока ребенок ожидает закрытия файла; в этот момент он знает, что вы закончили с ним разговаривать, и пора убрать себя.

Есть некоторые предостережения в отношении потомков, которые фактически получат это сообщение, для чего см. Справочную страницу kill( 2 ). Предостережения в основном не будут иметь значения, если процесс, который вы запустили через AEWP, не потерял привилегий, хотя одна неявная проблема заключается в том, что этот подход не будет работать, если какие-либо дочерние процессы поместили себя в новую группу процессов.

1
Jeremy W. Sherman 3 Сен 2009 в 23:04