Naprawdę nie mam pojęcia. Jest wzmianka o tym /etc/rc.shutdown.local
w /System/Library/LaunchDaemons/com.apple.SystemStarter.plist
, ale nie jestem wcale pewien, co to znaczy. Strona podręcznika dla SystemStarter
nie jest świetną pomocą, poza informowaniem nas, że jest przestarzała. Program działa jednak w moim systemie. Aha, a łańcuch /etc/rc.shutdown.local
znajduje się również w SystemStarter
pliku 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, launchd
wyśle SIGTERM, który powoduje, że program robi swoje. Oczywiście musi to zrobić dość szybko lub launchd
zastosuje większy młot.
Oto mój launchctl
list, nazwany no.ntnu.math.hanche.quietboot.plist
i 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.local
w/System/Library/LaunchDaemons/com.apple.SystemStarter.plist
, ale nie jestem wcale pewien, co to znaczy. Strona podręcznika dlaSystemStarter
nie jest świetną pomocą, poza informowaniem nas, że jest przestarzała. Program działa jednak w moim systemie. Och, a łańcuch/etc/rc.shutdown.local
znajduje się wSystemStarter
pliku binarnym. Domyślam się, że pliki będą uruchamiane przy zamykaniu.