Naprawdę nie mam pojęcia. Jest wzmianka o tym /etc/rc.shutdown.localw /System/Library/LaunchDaemons/com.apple.SystemStarter.plist, ale nie jestem wcale pewien, co to znaczy. Strona podręcznika dla SystemStarternie jest świetną pomocą, poza informowaniem nas, że jest przestarzała. Program działa jednak w moim systemie. Aha, a łańcuch /etc/rc.shutdown.localznajduje się również w SystemStarterpliku binarnym. Domyślam się, że pliki będą uruchamiane przy zamykaniu.
Ale jeśli mogę odpowiedzieć na twoje ukryte pytanie, jak uruchomić coś przy wyłączaniu: oto co zrobiłem. Najpierw napisałem i skompilowałem ten mały program C. To, co robi, to po prostu spać, dopóki nie otrzyma SIGTERM, w którym to momencie exec wykonuje swoje argumenty:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
char **args;
void sigterm(int s) {
execvp(args[1],args+1);
fprintf(stderr, "%s: exec failed: ", args[0]);
perror(args[1]);
exit(1);
}
int main(int argc, char *argv[]) {
args=argv;
signal(SIGTERM,sigterm);
for (;;) sleep(0x7FFFFFFF);
}
Mam skonfigurowanego demona uruchamiania do uruchamiania tego programu podczas uruchamiania. Przyjdź czas zamknięcia, launchdwyśle SIGTERM, który powoduje, że program robi swoje. Oczywiście musi to zrobić dość szybko lub launchdzastosuje większy młot.
Oto mój launchctllist, nazwany no.ntnu.math.hanche.quietboot.plisti umieszczony w /Library/LaunchDaemons/. Jego jedynym celem jest uruchomienie `nvram SystemAdioVolume =% 01 'przy wyłączaniu, dzięki czemu mogę zrestartować komputer bez gongu.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>no.ntnu.math.hanche.quietboot</string>
<key>ProgramArguments</key>
<array>
<string>/local/bin/atshutdown</string>
<string>/usr/sbin/nvram</string>
<string>SystemAudioVolume=%01</string>
</array>
<key>Disabled</key>
<false/>
<key>KeepAlive</key>
<false/>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
/etc/rc.shutdown.localw/System/Library/LaunchDaemons/com.apple.SystemStarter.plist, ale nie jestem wcale pewien, co to znaczy. Strona podręcznika dlaSystemStarternie jest świetną pomocą, poza informowaniem nas, że jest przestarzała. Program działa jednak w moim systemie. Och, a łańcuch/etc/rc.shutdown.localznajduje się wSystemStarterpliku binarnym. Domyślam się, że pliki będą uruchamiane przy zamykaniu.