【发布时间】: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