Завершить процесс после запуска с AuthorizationExecuteWithPrivileges - PullRequest
1 голос
/ 26 августа 2009

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

Спасибо

Ответы [ 3 ]

3 голосов
/ 26 августа 2009

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

1 голос
/ 03 сентября 2009

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

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

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

1 голос
/ 01 сентября 2009

Apple имеет пример кода , который использует стандартный вывод для передачи PID обратно вызывающей стороне.

...