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>