No tengo idea, la verdad. Hay una mención de /etc/rc.shutdown.local
en /System/Library/LaunchDaemons/com.apple.SystemStarter.plist
, pero no estoy del todo seguro de lo que significa. La página de manual de SystemStarter
, no es una gran ayuda, más allá de que nos informaba que es obsoleto. El programa se está ejecutando en mi sistema, sin embargo. Ah, y la cadena /etc/rc.shutdown.local
se encuentra en el interior de la SystemStarter
binario así. Mi conjetura es que los archivos no se puede ejecutar en el cierre.
Pero si me puede contestar a su pregunta implícita de cómo ejecutar algo en la parada: Aquí es lo que he hecho. En primer lugar, me escribió y compiló este pequeño programa en C. Lo que hace es simplemente para dormir hasta que recibe un SIGTERM, momento en el cual exec de sus argumentos:
#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);
}
Tengo un lanzamiento demonio configurar para ejecutar este programa en el inicio. Llegado el tiempo de parada, launchd
enviará el SIGTERM que hace que el programa haga su trabajo. Por supuesto, tiene que hacerlo con bastante rapidez, o launchd
se aplicará un mayor mazazo.
Aquí está mi launchctl
plist, nombrado no.ntnu.math.hanche.quietboot.plist
y se coloca en /Library/LaunchDaemons/
. Su único propósito es ejecutar `nvram SystemAdioVolume=%01' en la parada, así que me puede reiniciar sin el timbre.
<?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>