【已解决】后台Daemon在内存不足时会被杀掉

求助大神,有什么办法可以让后台Daemon,在系统剩余内存较低(Received memory warning)时不被干掉?
如果Daemon可以做到,那么有办法让App也可以吗?


过程:
SSH到设备(iPad2,512MB内存)终端,然后用top命令观察,发现当 free内存较低时(不足10MB),我的Daemon就会因为"<Error>: assertion failed: 12B440: libxpc.dylib + 10851 [6D3E948A-39BD-3548-AA90-38575933BDEF]: 0x20"而退出

干掉谁是系统决定的,当daemon的重要性比较高时,就会越晚被干掉。你可以看看几个关键的daemon,比如amfid、lockdownd等等,他们在内存较低时会不会被干掉,如果不会的话,看看他们对应的plist文件里有没有什么玄机

好的,谢谢狗神,我找它们的plist看看,有结论了再在帖子里回复。

PS:在你回复之前,我做了多次测试,个人感觉和启动方式有点关系:如果我用"launchctl load"的方式启动daemon,100%会被杀掉;而如果用"daemon&"方式启动,就不一定会被干掉。我先按你说的路子试试。

大致有结论了,虽然还是不知道原理。
结论是:使用"launchctl load"的方式启动的daemon,在系统内存不足时,会比通过"daemon&"方式启动的,更早被干掉。

个人测试被干掉的优先顺序:"launchctl load"启动的daemon > OpenSSH > "daemon&"方式启动的

PS:测试发现,被干掉的优先级和签入的Entitlement无关,我给daemon签了"lockdownd"的权限,结果也还是一样

daemon&
是什么?我第一次见,能给个参考链接之类的吗?

额,没那么高端,可能你被我打的"daemon"误导了 :stuck_out_tongue_winking_eye:
我这里说的其实就是"进程名 &"
让程序在后台执行而已,没什么特别的

我还是没有见过“进程名 &”之类的东西,有链接吗?

Linux/Unix下想让进程在后台执行,一般不都会在进程名后面加个"&"么

你度娘下"nohup"吧,差不多的东西

1 个赞

@sinsfk 你好 我想请问一下 daemon& 这种方式是怎么后台启动程序的呀?我没有用过,想请教一下 谢谢你啦

终端的话,直接 "进程名&"就可以了呀,程序里面调用就通过system函数去执行

噢噢好的 非常感谢!:slight_smile: