종료하기 전에 Mac OS X에서 프로그램을 실행하려면 어떻게해야합니까? VirtualBox VM을 저장하도록

재부팅 할 때 모든 VirtualBox VM을 저장하도록 Mac OS X을 사용하려고합니다. 이미이 작업을 수행하는 스크립트가 있지만 재부팅 전에이 스크립트를 자동으로 실행하려면 OS X가 필요합니다.

Mac OS X이 재시동 될 때 / sbin / reboot를 실행합니까?

아니면 어떻게 다른 일을 할 수 있습니까?



답변

Apple은 ” launchd ” 를 사용하도록 권장하지만 가장 쉬운 방법은 터미널의 pico와 같은 쉘 스크립트를 작성하는 것입니다.

pico /Users/Shared/logoutHook.sh

파일은 다음과 같은 내용을 포함 할 수 있습니다.

#!/bin/bash
say 'Hasta la vista baby!'

그런 다음 실행 권한을 부여하십시오.

sudo chmod +x /Users/Shared/logoutHook.sh

마지막으로 스크립트를 로그 아웃 프로 시저에 연결하십시오.

sudo defaults write com.apple.loginwindow LogoutHook /Users/Shared/logoutHook.sh

이것을 테스트하지 않은 상태에서 다른 응용 프로그램을 시작하면 나 자신과 당신에게 경고하는 것이 도움이 될 것이라고 생각합니다.

  • 원하는 것을 실행하기 위해 종료 신호를 종료해야 할 수도 있습니다.

  • 그런 다음 새로운 것을 보내십시오 (우리 자신의
    스크립트가 보낸 신호를 죽이지 않도록 조심하십시오 )…


후크를 제거하려면 다음을 수행하십시오.

sudo defaults delete com.apple.loginwindow LogoutHook

launchd “를 사용하는 경우 SIGTERM 신호를 캡처하는 것이 좋습니다. /System/Library/LaunchDaemons/com.apple.shutdown_monitor.plist를 살펴보십시오.


답변

Launched는 StopService () 서브 루틴 이있는 모든 스크립트 / 데몬에 종료에 대한 조기 경고를 보냅니다 . 이렇게하면 프로세스가 정리할 시간이 가장 길어집니다.

launchd를 사용하여 스크립트를 시작하고 종료 할 때까지 백그라운드에서 실행하십시오.

조기 경보를받은 서비스가 종료 된 후 모든 프로세스SIGTERMSIGKILL핵폭탄이 발생 하기 몇 초 전에 신호를 받습니다 .

해당 시간이되면 명령을 실행하기 위해 SIGTERM을 잠자고 트랩하는 스크립트를 작성할 수 있습니다. 명령 실행에 충분한 시간이 필요한지 확인해야합니다. 이것은 약간의 코딩을 피하지만 많이는 아닙니다. 일반적으로 쉘 스크립트에서 데몬을 만드는 것이 좋습니다.


역사적 관점에서 볼 때 /sbin/reboot, 런레벨은 Darwin / OS X에 존재하지 않았으며 이제 rc.shutdown나머지 부분과 함께 더 이상 사용되지 않습니다 . 호랑이 또는 그 이전 버전에서 rc.shutdown을 사용할 수 있습니다 (현재 확인할 이미지가 하나도 없습니다) Lion은 확실히 rc.d 및 init.d의 흔적을 모두 제거했습니다.rclaunchd

sleepwatcher 가 귀하의 경우에 도움이 되는지 확인하고 싶을 수도 있습니다 . 나는 그것을 오랫동안 사용하지는 않았지만 확실히 딜레마를 해결하는 것을 목표로합니다.


답변