커맨드 라인을 통해 안드로이드를 다시 시작하는 가장 좋은 방법은 무엇입니까?


29

루팅 된 안드로이드 4.1.1 기기를 재부팅하는 가장 좋고 친근한 방법을 찾고 있습니다. 지금까지 이러한 솔루션을 찾았습니다.

  • su -c "reboot" -기기를 다시 시작한 후 Wi-Fi에 문제가 발생합니다. 경우에 따라 파일 시스템이 중단 될 수 있음을 읽었습니다. ssh를 통해 작동하지 않습니다.
  • toolbox reboot -여기에서도 똑같은 문제가 있지만 ssh를 통해 작동합니다.
  • reboot -d 8 -f -재시작 후 문제 발생 (예 : 일부 앱이 시작되지 않음)
  • busybox killall system_server - "핫 재부팅"(실제로 시스템을 다시 시작하지는 않음)
  • start|stop -Android 런타임을 시작 / 중지합니다 (실제로 시스템을 다시 시작하지는 않음)

(하드웨어) 전원 버튼을 누를 때 장치가 정확히 무엇을합니까? 가장 친근한 방법이라고 생각합니다.


su -c "reboot"reboot정의 된 명령을 실행합니다 reboot.c. reboot.c몇 년 동안 많은 변화가 없었습니다. 항상 sync ()를 호출 한 다음 장치를 재부팅했습니다. 또한 이 커밋 덕분에 최신 버전의 reboot.c모든 파일 시스템을 마운트 해제합니다. Android 4.1.1에는 언급 한 커밋이 포함되어 있으므로 su -c "reboot"Android 4.1.1에서 파일 시스템이 어떻게 손상 될 수 있는지 알 수 없습니다 .
잊을 수없는

친애하는 acy : Firelord의 늦은 답변 ( su -c 'am start -a android.intent.action.REBOOT')은 Android 4.1.2에서 작동하며 기존 답변 중 가장 좋은 것 같습니다. Android 4.1.1에서 작동하거나 너무 바쁘면 녹색 확인 표시를 클릭하여 답변 섹션 상단으로 이동하십시오.
unforgettableid

답변:


13

간단하고 정말로 :

  • Android는 런타임의 중요한 부분을 안전하게 종료합니다.
  • OS는 또한 앱과 서비스가 정상적으로 종료되도록 알리려는 의도를 방송하고 있습니다. 이것들은 차례로 모든 데이터와 공유 환경 설정의 캐시를 플러시하고 sqlite 데이터베이스 등에 무엇을 저장합니까?

다시 말해, 앱과 서비스에는 체계적으로 정리할 수있는 기회가 주어집니다.

시도한 명령이 더 거칩니다. 실제로는 안전하게 종료하여 안전 메커니즘을 우회합니다.

안드로이드는 리눅스 환경이 아닌 일반적인 데스크톱 버전의 리눅스라는 의미에서 리눅스 자체가 아니다.

다음과 같은 랩퍼 스크립트를 작성할 수 있습니다.

#!/system/bin/sh
am broadcast android.intent.action.ACTION_SHUTDOWN
sleep 5
reboot

safe_shutdown.sh0755의 권한으로 이것을 (으)로 저장할 수 있습니다. 마일리지는 핸드셋 및 ROM에 따라 다를 수 있으므로 보장 할 수 없습니다.


이 설명에 감사드립니다! 예를 들어 ssh (adb 아님)를 통해 원격으로 수행 할 수 있습니까?
acy

4
나는 그가 명령으로 버튼 종료를 모방 할 수있는 방법을 알고 싶어한다고 생각합니다.
흐름

그것이 장치를 종료하는 가장 친근하고 안전한 / 최상의 방법이라면 그렇습니다 :)
acy

@Flow adb reboot? 그것이 안전한지 확실하지 않습니다!?! 방송을 보내고 ACTION_SHUTDOWN나서 전화를 걸어 주는 래퍼 스크립트 adb reboot일까요?
t0mm13b

브로드 캐스트 ACTION_SHUTDOWN가 원하는 작업을 수행하는지 확실하지 않습니다 . "포 그라운드 활동도 일시 중지되므로 앱은 일반적으로이를 처리 할 필요가 없습니다." 따라서 대부분의 앱처럼 처리 되지 않습니다 . 활동을 일시 중지합니까?
Matthew 읽기

12

(하드웨어) 전원 버튼을 누를 때 장치가 정확히 무엇을합니까? 가장 친근한 방법이라고 생각합니다.

기기 전원을 끄는 옵션이있는 대화 상자가 표시됩니다 (Android는 재부팅을 제공하지 않음). 것으로 보인다 ShutdownActivity은 당신이 긴 전원 버튼을 누를 때에 호출된다.

어쨌든, 이것은 원격 또는 로컬로 시도 할 수 있지만 루트 액세스로만 가능합니다.

su -c 'am start -a android.intent.action.REBOOT'

정상적으로 종료되고 재부팅됩니다. 나는 여기에 그것을 발견했을 때 의도를 찾고 있었다 .

메소드는 Android 4.2.1, 5.0.2 및 6.0.1에서 테스트되었으며 Android 4.1.1 에서도 작동 합니다.

최신 정보

재고 안드로이드 5.0 및 6.0.1에서 테스트 :

su -c 'svc power reboot'

여기 소스 코드 따라 KitKat 빌드도 명령을 지원해야합니다.


1
정확히 내가 필요한 것. 재부팅 텍스트 값이있을 때 여전히 "전원 끄기 ..."라고 말하는 것이 이상합니다.
사이렌

10
killall zygote

루트 zygote프로세스가 종료되고 Android 시스템이 새로 고쳐집니다.

휴대 전화의 하드웨어는 다시 시작되지 않으며 Android 프로세스 만 다시 시작됩니다.

기본적으로 (Linux에서) kill/ killall명령은 프로세스를 정상적으로 종료하는 방법을 제공하지만 zygote 구현 에 따라 실행중인 Android 앱을 정상적으로 종료하는지 여부 에 따라 다릅니다 .

참고 : 사용 여부 su -c, SSH 또는 ADB를 통한 연결 또는 다른 방법 으로 루트로 실행해야합니다 .

이 조치의 다른 이름 :

  • 소프트 재부팅
  • 핫 재부팅

일부 장치에서 Wi-Fi가이 명령 후에 제대로 다시 연결되지 않음을 알았습니다 (따라서 Wi-Fi를 사용하지 않도록 설정하고 잠시 기다렸다가 다시 사용하도록 설정해야 함).
palswim

2
독자 : Lollipop에서 Android 프레임 워크를 다시 시작하는 표준 방법은 am restart입니다. 그러나 루트 액세스가 필요합니다.
Firelord

killall zygote프로세스를 정상적으로 종료 할 수있는 방법을 제공 합니까 ? 흥미로운 질문입니다. 누군가는 zygote소스 코드 를보고 알아야합니다.
잊을 수없는
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.