【问题标题】:Objective C - Terminate all other apps running in the background目标 C - 终止在后台运行的所有其他应用程序
【发布时间】:2016-06-12 23:16:48
【问题描述】:

我需要开发一个企业应用程序,它应该能够关闭当前在 非越狱 iOS 设备上通过多线程运行的所有其他应用程序。

几年前,我有一个名为PKiller or Process Killer 的应用程序,它列出了所有当前正在运行的应用程序,包括它们的程序ID,并且能够关闭它们。这是一款在官方 AppStore 上发布的应用,但由于违反了他们的指导方针,Apple 理所当然地将其撤下了。

有人知道如何获取当前正在运行的进程并关闭它们吗?

(同样,这个应用程序不会去 Apple / AppStore,因为它是一个企业应用程序)

编辑:

我进行了更深入的研究并发现,在 iOS 9 中,您甚至无法获得任何正在运行或已安装的应用程序以及诸如 PID 之类的连接信息。Apple made the sysctl no longer accessible to sandboxed iOS 9 apps. 还有other methods 以获取任何第三个 PID 失败在 iOS 9 中。

【问题讨论】:

  • 查看 Posix API 以获取进程信息。我不熟悉它们,但您应该能够找到 API 来检索 PID 并向它们发送信号。
  • 那显然是极其危险的。您基本上是在随机点使应用程序崩溃,例如在保存文件的过程中。
  • 发送终止信号可能不会那么危险,因为应用程序可以随时被系统终止。但是要杀死哪些进程?我肯定不想在我自己的设备上安装那个应用程序。
  • @Eiko iOS 会终止应用程序,但使用协议让应用程序有机会在之前实现后期操作……在这种模型中,信号发送更加残酷。
  • 您可以尝试分配大量内存以导致内存压力终止其他应用程序,但使用后台模式的应用程序可能会重新启动。即使在企业应用程序中,我也不能说您尝试做的事情对我有任何意义

标签: ios objective-c iphone multithreading enterprise


【解决方案1】:

过去有一种方法可以做到这一点,但从 iOS 9 开始,它将不再有效。用于此的库 sysctl 不再可供沙盒化 iOS 9 应用访问。

在 iOS 9 中,沙盒现在会阻止进程访问 其他的 kern.proc、kern.procargs 和 kern.procargs2 值 进程

iOS 应用不允许查看其他应用正在运行

https://developer.apple.com/videos/play/wwdc2015-703/

可能还有另一种方式,但肯定不会像几年前那么容易,而且 Apple 将不遗余力地关闭企业应用程序,即使是企业应用程序也是如此。

【讨论】:

  • 是的,幸运的是我最近也发现了这一点......所以如果有人找到另一种方式,我们将不胜感激,但在此之前,这个答案是最好的答案。如果你不越狱,我找不到任何办法。谢谢你的回答!
  • 是的,显然越狱将允许这样做。不用去商店,你可以使用私有 API 之类的东西,但我认为这样做的主要方式是通过内核 API。没有这些,我认为你不走运。祝你好运。您是否也试图杀死内部应用程序的其他应用程序。如果是这样,您可以通过自定义 url 方案向他们传递 kill 命令。您只需要更改其他应用程序即可处理该方案并处理请求以使用 `exit(0);' 杀死自己
【解决方案2】:

我相信你不能这样做,因为苹果不允许你在你的应用程序沙箱中访问数据。

【讨论】:

  • 你的意思是Apple删除了过去的公共API以及可能存在的私有API?
猜你喜欢
  • 1970-01-01
  • 2023-03-10
  • 1970-01-01
  • 2012-05-21
  • 1970-01-01
  • 1970-01-01
  • 2017-04-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多