首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有办法在init.rc中优雅地停止安卓服务(没有SIGKILL)?

有没有办法在init.rc中优雅地停止安卓服务(没有SIGKILL)?
EN

Stack Overflow用户
提问于 2016-08-08 20:33:23
回答 2查看 1.6K关注 0票数 0

我有一个本地Android服务,它是通过GUI设置的属性启动和停止的。在init.rc中启动和停止服务的命令如下:

代码语言:javascript
复制
service myservice /system/bin/myservice
    class late_start
    user my_service
    disabled

on property:persist.myapp.myservice.enable=1
    start myservice

on property:persist.myapp.myservice.enable=0
    stop myservice

如果服务停止,需要清理JNI内存资源,但似乎服务是通过SIGKILL停止的:

代码语言:javascript
复制
6944  6974 V myservice: IMyProcessA::onTransact()
 712   712 I AP_KERNEL: init: Service 'myservice' is being killed...
 510   510 I ServiceManager: service 'ProcessA.MyService' died
 656   656 V ProcessA: ProcessA::NotificationClient::binderDied()
 656   656 V ProcessA: removeNotificationClient() 0xb6bc60a8, pid 6944
 656   656 V ProcessA: ProcessA::NotificationClient::~NotificationClient()
 712   712 I AP_KERNEL: init: Service 'myservice' (pid 6944) killed by signal 9
 712   712 I AP_KERNEL: init: Service 'myservice' (pid 6944) killing any children in process group 

既然没有办法拦截SIGKILL来清理,那么init.rc 'stop myservice‘是否有任何选项可以将终止信号更改为我可以拦截的东西,例如SIGTERM?

EN

Stack Overflow用户

发布于 2019-01-11 07:04:50

您的“无内存泄漏”位于内核端,但是在一个进程结束之前,需要在用户空间中完成许多工作,例如,

  • 关闭文件并将缓存的数据刷新到内核层。
  • 删除一些临时文件。
  • 通知其他过程我就要死了。
  • 将RAM中的一些数据缓存写入磁盘,否则磁盘上的数据将不一致。

.对于上述情况,发送SIGKILL是非常粗糙的。

票数 1
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38838044

复制
相关文章

相似问题

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