Objective c 使用AuthorizationExecuteWithPrivileges启动后终止进程

Objective c 使用AuthorizationExecuteWithPrivileges启动后终止进程,objective-c,cocoa,shell,authorization,kill,Objective C,Cocoa,Shell,Authorization,Kill,如果我使用AuthorizationExecuteWithPrivileges启动了一个shell脚本,那么最简单的方法是什么来终止该脚本及其派生的任何其他进程 谢谢它是以root用户身份运行的,所以您不能从常规用户进程中终止它。您必须很好地请求它自己退出。它以root用户身份运行,因此您无法从常规用户进程中终止它。你必须很好地要求它自己退出。苹果有一个使用stdout将PID传回给调用者的系统 苹果有一个使用stdout将PID传递回调用者的系统 使用AuthorizationExecuteW

如果我使用AuthorizationExecuteWithPrivileges启动了一个shell脚本,那么最简单的方法是什么来终止该脚本及其派生的任何其他进程


谢谢

它是以root用户身份运行的,所以您不能从常规用户进程中终止它。您必须很好地请求它自己退出。

它以root用户身份运行,因此您无法从常规用户进程中终止它。你必须很好地要求它自己退出。

苹果有一个使用stdout将PID传回给调用者的系统

苹果有一个使用stdout将PID传递回调用者的系统

使用
AuthorizationExecuteWithPrivileges()
在其最后一个参数
FILE**communicationPipe
中通过引用返回的通信管道,向子进程发送一条消息,要求其取出自身及其子进程。然后,它可以使用
kill(0,SIGINT)
杀死自己及其所有后代,或者,如果需要更严厉的措施,
SIGKILL

您使用的消息可以简单到在孩子等待文件关闭时关闭文件;到那时,它知道你已经和它谈完了,是时候把自己带出去了


对于实际接收此消息的子体,有一些警告,请参见
kill(
2
手册页。只要您通过AEWP启动的进程没有放弃特权,这些警告大多无关紧要,不过一个隐含的问题是,如果任何子进程将自己放入新的进程组中,这种方法将不起作用。

使用
AuthorizationExecuteWithPrivileges()的通信管道
在其最后一个参数中通过引用返回,
FILE**communicationPipe
,以向子进程发送一条消息,要求其取出自身及其子进程。然后,它可以使用
kill(0,SIGINT)
杀死自己及其所有后代,或者,如果需要更严厉的措施,
SIGKILL

您使用的消息可以简单到在孩子等待文件关闭时关闭文件;到那时,它知道你已经和它谈完了,是时候把自己带出去了


对于实际接收此消息的子体,有一些警告,请参见
kill(
2
手册页。只要您通过AEWP启动的进程没有放弃特权,这些警告就无关紧要了,不过一个隐含的问题是,如果任何子进程将自己放入新的进程组中,这种方法将不起作用。

谢谢,我该如何要求它顺利退出?我想我总是可以使用另一个“AuthorizationExecuteWithPrivileges”命令来终止它,但是用户必须输入管理员通行证才能关闭进程,这将非常不方便……是的。你可以使用任何形式的IPC。对不起,我不知道什么是IPC?我研究过它,但它可能意味着很多不同的东西。感谢进程通信。一种高级方法是分布式对象();较低级别的方式是Mach端口,而更原始的方式(如果不是较低级别的话)是UNIX域套接字。谢谢,我如何要求它很好地退出?我想我总是可以使用另一个“AuthorizationExecuteWithPrivileges”命令来终止它,但是用户必须输入管理员通行证才能关闭进程,这将非常不方便……是的。你可以使用任何形式的IPC。对不起,我不知道什么是IPC?我研究过它,但它可能意味着很多不同的东西。感谢进程通信。一种高级方法是分布式对象();较低级别的方式是Mach端口,更原始的方式(如果不是较低级别的话)是UNIX域套接字。