Non ne ho idea, davvero. C'è una menzione di /etc/rc.shutdown.local in /System/Library/LaunchDaemons/com.apple.SystemStarter.plist , ma non sono affatto sicuro di cosa significhi. La pagina di manuale per SystemStarter non è di grande aiuto, oltre a informarci che è deprecata. Il programma è in esecuzione sul mio sistema, però. Oh, e la stringa /etc/rc.shutdown.local si trova anche nel SystemStarter binario. La mia ipotesi è che i file verranno eseguiti all'arresto.
Ma se posso rispondere alla tua domanda implicita su come eseguire qualcosa allo spegnimento: ecco cosa ho fatto. Innanzitutto, ho scritto e compilato questo piccolo programma C. Quello che fa è semplicemente dormire fino a quando non riceve un SIGTERM, a quel punto esegue i suoi argomenti:
#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);
}
Ho installato un demone di avvio per eseguire questo programma all'avvio. Arriva il tempo di spegnimento, launchd invierà il SIGTERM che fa sì che il programma faccia il suo esempio. Certo, deve farlo abbastanza velocemente, o launchd applicherà un mazza più grande.
Ecco il mio launchctl plist, chiamato no.ntnu.math.hanche.quietboot.plist e inserito in /Library/LaunchDaemons/ . Il suo unico scopo è eseguire 'nvram SystemAdioVolume =% 01' all'arresto, quindi posso riavviare senza il cicalino.
<?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>