Есть ли способ остановить сервисы Android в init.rc изящно (без SIGKILL)?

У меня есть собственный сервис Android, который запускается и останавливается с помощью свойства, установленного через графический интерфейс. Команды для запуска и остановки службы в init.rc следующие:

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:

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, например?

1 ответ

Решение

После обсуждения этого с коллегой мы пришли к выводу, что после SIGKILL ядро ​​освободит всю память, связанную с процессом, и что утечки памяти не будет.

Если у кого-то есть информация, противоречащая этому, пожалуйста, дайте мне знать.

Ваша "утечка памяти" не стоит на стороне ядра, но многие работы должны быть выполнены в пользовательском пространстве, прежде чем завершится один процесс, например,

  • закрыть файлы и сбросить кэшированные данные в слой ядра.
  • удалите несколько временных файлов.
  • уведомить другой процесс, что я собираюсь умереть.
  • записать некоторое кеширование данных в RAM на диск, иначе данные на DISK будут противоречивыми.

...... Для вышесказанного, отправка SIGKILL очень сырая.

Другие вопросы по тегам