개발 이야기

Unable to stop service 'zygote_secondary'

ANDYLION 2023. 7. 13. 15:34
728x90
반응형

 

Zygote란?

Zygote는 안드로이드 운영 체제에서 중요한 역할을 하는 프로세스입니다.
주요 역할은 새로운 앱 프로세스를 생성하는 것으로,
앱이 실행될 때마다 Zygote는 프로세스의 기반이 되는 템플릿을 제공합니다.
이렇게 함으로써 앱 프로세스의 생성 속도를 향상시킬 수 있습니다.
Zygote 프로세스는 안드로이드 시스템이 시작될 때부터 실행되며, 
안드로이드의 가상 머신(Dalvik 또는 ART)의 인스턴스를 초기화하고 앱 프로세스의 템플릿으로 사용합니다.
따라서 Zygote 프로세스는 안드로이드 시스템의 핵심 구성 요소 중 하나입니다.

Normal property

normal case의 경우
system/core/rootdir/init.zygote64_32.rc를 boot time에 service를 update시킵니다.
해당 파일을 열어서 보면 service zygote와 service zygote_secondary를 
app_process64/32에 각각 load하여 init.svc.zygote와 init.svc.zygote_secondary가 running상태가 되도록 설정해줍니다.

console:/ # getprop | grep "zygote"
[init.svc.zygote]: [running]
[init.svc.zygote_secondary]: [running]
[init.svc_debug_pid.zygote]: [468]
[init.svc_debug_pid.zygote_secondary]: [469]
[ro.boottime.zygote]: [22520114802]
[ro.boottime.zygote_secondary]: [22553891177]
[ro.zygote]: [zygote64_32]

 

android start/stop cmd fail issue

could not find 'zygote_secondary' for ctl.stop from pid: 4138 (stop)
Unable to stop service 'zygote_secondary'
See dmesg for error reason

 

quickboot.rc를 별도로 만들어서 zygote_secondary를 disable하면서 이슈가 발생했습니다.
getprop | grep zygote를 해본 결과 다음과 같이 secondary가 보이지 않습니다.
그래서 해당 이슈가 발생하였고, secondary가 
존재하지 않기 때문에 ctl.start/ctl.stop을 사용할 수 없게 됩니다.
이러한 문제는 quickboot를 하더라도 secondary를 enable해주면 문제가 안됩니다.

 

반응형

 

이슈에 대한 해결을 위해 chatGPT에게 물어봤습니다.

chatGPT 답변

'could not find 'zygote_secondary' for ctl.stop from pid' 에러는 안드로이드 운영 체제에서 발생하는 오류로, 프로세스 간 통신을 관리하는 Zygote 서비스에 문제가 있을 수 있습니다. 이 오류를 해결하기 위해 몇 가지 방법을 시도해 볼 수 있습니다: 재부팅: 먼저, 안드로이드 기기를 재부팅해보세요. 종종 일시적인 오류로 인해 발생하는 문제가 해결될 수 있습니다. 앱 캐시 및 데이터 삭제: 설정 > 애플리케이션 관리자로 이동하여 해당 앱의 캐시 및 데이터를 삭제해보세요. 이를 통해 앱의 임시 파일이나 설정이 재설정되어 오류를 해결할 수 있습니다. 앱 업데이트: 구글 Play 스토어나 해당 앱의 개발자 페이지에서 최신 버전의 앱으로 업데이트해보세요. 버그 수정 및 개선된 기능이 포함된 새로운 버전이 문제를 해결할 수 있습니다. 안드로이드 시스템 업데이트: 안드로이드 운영 체제 자체의 문제일 수도 있으므로, 설정 > 소프트웨어 업데이트 또는 시스템 업데이트 메뉴에서 안드로이드 시스템 업데이트를 확인하고 설치해보세요. 공장 초기화: 만약 위의 방법으로 문제가 해결되지 않는다면, 공장 초기화를 고려할 수 있습니다. 이 경우에는 모든 데이터가 삭제되므로 사전에 백업을 수행하고 신중하게 진행해야 합니다. 만약 이러한 단계를 시도한 후에도 문제가 지속된다면, 해당 앱의 개발자 또는 기기 제조업체의 지원팀에 문의하여 더 자세한 도움을 받을 수 있습니다.

 

답변에서 알 수 있듯이 chatGPT가 모든 걸 해결해 줄 수는 없습니다.
왜냐하면 chatGPT는 제가 사용하는 안드로이드 플랫폼과 
수정 내용을 알 수 없기 때문에 제조업체 지원팀에 문의하라는 답변이 나옵니다.

disable zygote_secondary


boot time을 최적화 하기 위해 다음과 같이 secondary를 disable하여 시간을 줄였습니다.
하지만 module별로 android system이 suspend상태에서 동작해야하는 unit test가 존재할 수 있기 때문에 
다음과 같이 secondary를 disable하면서 unit test를 할 수 없는 상황이 나옵니다.

[init.svc.zygote]: [running]
[init.svc_debug_pid.zygote]: [469]
[ro.boottime.zygote]: [22007665426]
[ro.zygote]: [zygote64_32_quickboot]

quickboot로 설정한 .rc파일에서 zygote_secondary를 disable -> enable로 변경 후 확인해봤습니다.
zygote_secondary name을 zygote_late로 변경했습니다.
아래와 같이 secondary가 존재하는 것을 확인 할 수 있습니다.

console:/ # getprop | grep zygote
[init.svc.zygote]: [running]
[init.svc.zygote_late]: [running]
[init.svc_debug_pid.zygote]: [1283]
[init.svc_debug_pid.zygote_late]: [575]
[ro.boottime.zygote]: [21814583217]
[ro.boottime.zygote_late]: [23948191885]
[ro.zygote]: [zygote64_32_quickboot]

그럼 여기서 stop cmd를 사용하여 android system을 suspend상태로 전환해보겠습니다.
stop cmd를 쳤더니 역시 zygote_secondary가 없다고 나오네요. name 변경도 안된다고 생각하면 됩니다.
 

[  313.142190] init: Control message: Could not find 'zygote_secondary' for ctl.stop from pid: 2761 (stop)
Unable to stop service 'zygote_secondary'
See dmesg for error reason.

.rc파일을 수정해서 다시 올려봤습니다.
이제 제대로 나오네요.
console에서 stop cmd를 쳤을 때 제대로 suspend로 진입하는 것을 확인 할 수 있었습니다.

console:/ # stop
[  152.286324] init: Sending signal 9 to service 'zygote_secondary' (pid 1285) process group...
[  152.300821] libprocessgroup: Successfully killed process cgroup uid 0 pid 1285 in 5ms
[  152.314882] init: Control message: Processed ctl.stop for 'zygote_secondary' from pid: 2772 (stop)
[  152.324761] init: Service 'zygote_secondary' (pid 1285) received signal 9
[  152.333254] init: Sending signal 9 to service 'zygote' (pid 1284) process group...
[  152.481608] binder: undelivered transaction 41208, process died.
[  152.488603] libprocessgroup: Successfully killed process cgroup uid 0 pid 1284 in 147ms
[  152.526949] binder_alloc: 1351: binder_alloc_buf, no vma
[  152.532996] binder: 470:470 transaction failed 29189/-3, size 1780-32 line 3309
[  152.549096] binder_alloc: 1351: binder_alloc_buf, no vma
[  152.555117] binder: 491:1705 transaction failed 29189/-3, size 932-144 line 3309
[  152.701751] init: Control message: Processed ctl.stop for 'zygote' from pid: 2772 (stop)
[  152.710735] init: Service 'zygote' (pid 1284) received signal 9
[  152.717365] init: Sending signal 9 to service 'zygote' (pid 1284) process group...
[  152.725765] libprocessgroup: Successfully killed process cgroup uid 0 pid 1284 in 0ms

 

728x90
반응형
SMALL

'개발 이야기' 카테고리의 다른 글

[wsl/ubuntu] unable to initialize libusb: -99  (0) 2023.07.19
TRACE32  (0) 2023.07.13
How to fix (would clobber existing tag)  (0) 2023.07.06
Android kernel gki skip option  (0) 2023.07.04
Validating SELinux  (0) 2023.02.23