首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >沙盒-不允许killall操作

沙盒-不允许killall操作
EN

Stack Overflow用户
提问于 2012-05-30 07:48:16
回答 2查看 2.4K关注 0票数 2

我正在编写一个小的Mac应用程序(用Obj-C),它运行以下命令:

代码语言:javascript
复制
system("killall Finder");

我想看看如果我用沙箱保护应用程序会发生什么(因为在6月1日需要沙箱操作),但是应用程序不能工作。我得到了以下响应:

代码语言:javascript
复制
killall: warning: kill -TERM 6524: Operation not permitted

有什么办法可以绕过这个问题吗?是在特定的授权中添加还是以另一种方式运行命令?

提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-30 08:21:33

你的应用完全违背了沙盒的精神,所以MAS的审查者几乎不可能接受它。此外,您可能会对"defaults write com.apple.finder“在沙箱中所做的事情感到惊讶--基本上,没有什么有用的东西。你将不得不使用一个临时的例外授权给home-relative /Library/Preferences/com.apple.finder.plist,使用一些不受沙箱影响的API来获取指向home的路径(例如,getpwent()->pw_dir),然后直接加载和保存plist。然后你会发现,没有办法从沙箱应用程序中调用非子进程,也没有办法绕过它-如果你尝试系统killall,它最终会在与你相同的沙箱中运行,因此具有相同的限制。

但是,您提出了一个特定的问题,即是否有方法绕过系统killall失败,并且至少有三个(不包括沙箱中的漏洞,这些漏洞要么已经被10.7.4堵塞,要么很快就会被堵塞):

  1. 你可以创建一个不是沙箱的助手应用程序,它会为你做杀手锏。仅有的两种App Store认可的方法是XPC和SMLoginItemSetEnabled。在用户没有明确告诉你的情况下,你是不被允许启用助手的。
  2. 你可以向Finder发送一个苹果事件,要求它退出,而不是向它发出信号。最简单的方法是执行Applescript‘告诉应用程序"Finder“退出’。至少在10.7.3和更早的版本中,你需要一个临时的例外授权才能将苹果事件发送到com.apple.finder。(将来的操作系统版本可能会有不同的机制,但没有人可以在保密协议论坛之外讨论它们。)
  3. 您可以将苹果事件发送到其他一些进程-如系统事件-来代表您终止Finder。

诸若此类。

票数 2
EN

Stack Overflow用户

发布于 2014-10-21 03:26:23

如果你有一个很好的理由,你仍然可以像这样杀死应用程序:How can I terminate my app in a helper app with sanboxing enabled?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10808258

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档