我在Swift 3中一直在玩NSRunningApplication
,我提出了几个问题。
NSRunningApplication(withBundleIdentifier: "xyz").terminate() or .forceTerminate()
,我可以通过.isTerminated()
确认。否则,我可以解开"解冻"应用程序,让它完成启动。谢谢!
答案 0 :(得分:1)
你无法可靠地定位另一个进程并从Swift(或任何其他用户模式程序)控制它,因为你真的需要在内核中使用内核扩展(Kext)来实现它。
Apple的官方框架是Kernel Authorization框架(KAuth)。使用File Operation Scope
(在文档中描述),将向内核扩展通知各种操作,包括程序的执行,并允许或拒绝其访问。
可以在Google Santa的开源代码中看到其使用的工作示例,他们用它来管理自己的员工'电脑。正如其文件所述:
它包含一个监视执行的内核扩展,一个根据SQLite数据库的内容做出执行决策的userland守护进程,一个在块决策时通知用户的GUI代理和一个命令行实用程序。管理系统并使数据库与服务器同步。