aboutsummaryrefslogtreecommitdiff
path: root/sbin/shutdown
diff options
context:
space:
mode:
authorMitchell Horne <mhorne@FreeBSD.org>2022-02-22 00:16:07 +0000
committerMitchell Horne <mhorne@FreeBSD.org>2022-02-22 00:16:07 +0000
commit7b0a665d72c0fdc1bc15b87bb47dff4d895e32a9 (patch)
tree3a716b8e14a7b330089a681e18972e91db6b5c93 /sbin/shutdown
parent5a8fceb3bd9f478d66dcaa4582a4faa989d66a97 (diff)
downloadsrc-7b0a665d72c0fdc1bc15b87bb47dff4d895e32a9.tar.gz
src-7b0a665d72c0fdc1bc15b87bb47dff4d895e32a9.zip
boottrace: annotate init and shutdown utilities
Add boottrace annotations to record events in init(8), shutdown(8), and reboot(8). Sponsored by: NetApp, Inc. Sponsored by: Klara, Inc. X-NetApp-PR: #23 Differential Revision: https://reviews.freebsd.org/D31928
Diffstat (limited to 'sbin/shutdown')
-rw-r--r--sbin/shutdown/shutdown.c19
1 files changed, 16 insertions, 3 deletions
diff --git a/sbin/shutdown/shutdown.c b/sbin/shutdown/shutdown.c
index 67a433b8edde..76e02d1fd6b1 100644
--- a/sbin/shutdown/shutdown.c
+++ b/sbin/shutdown/shutdown.c
@@ -44,9 +44,10 @@ static char sccsid[] = "@(#)shutdown.c 8.4 (Berkeley) 4/28/95";
__FBSDID("$FreeBSD$");
#include <sys/param.h>
-#include <sys/time.h>
+#include <sys/boottrace.h>
#include <sys/resource.h>
#include <sys/syslog.h>
+#include <sys/time.h>
#include <ctype.h>
#include <err.h>
@@ -221,10 +222,13 @@ poweroff:
}
mbuflen = strlen(mbuf);
- if (offset)
+ if (offset) {
+ BOOTTRACE("Shutdown at %s", ctime(&shuttime));
(void)printf("Shutdown at %.24s.\n", ctime(&shuttime));
- else
+ } else {
+ BOOTTRACE("Shutdown NOW!");
(void)printf("Shutdown NOW!\n");
+ }
if (!(whom = getlogin()))
whom = (pw = getpwuid(getuid())) ? pw->pw_name : "???";
@@ -360,12 +364,16 @@ die_you_gravy_sucking_pig_dog(void)
{
char *empty_environ[] = { NULL };
+ BOOTTRACE("%s by %s",
+ doreboot ? "reboot" : dohalt ? "halt" : dopower ? "power-down" :
+ docycle ? "power-cycle" : "shutdown", whom);
syslog(LOG_NOTICE, "%s by %s: %s",
doreboot ? "reboot" : dohalt ? "halt" : dopower ? "power-down" :
docycle ? "power-cycle" : "shutdown", whom, mbuf);
(void)printf("\r\nSystem shutdown time has arrived\007\007\r\n");
if (killflg) {
+ BOOTTRACE("fake shutdown...");
(void)printf("\rbut you'll have to do it yourself\r\n");
exit(0);
}
@@ -383,6 +391,7 @@ die_you_gravy_sucking_pig_dog(void)
(void)printf("\nkill -HUP 1\n");
#else
if (!oflag) {
+ BOOTTRACE("signal to init(8)...");
(void)kill(1, doreboot ? SIGINT : /* reboot */
dohalt ? SIGUSR1 : /* halt */
dopower ? SIGUSR2 : /* power-down */
@@ -390,6 +399,7 @@ die_you_gravy_sucking_pig_dog(void)
SIGTERM); /* single-user */
} else {
if (doreboot) {
+ BOOTTRACE("exec reboot(8) -l...");
execle(_PATH_REBOOT, "reboot", "-l", nosync,
(char *)NULL, empty_environ);
syslog(LOG_ERR, "shutdown: can't exec %s: %m.",
@@ -397,6 +407,7 @@ die_you_gravy_sucking_pig_dog(void)
warn(_PATH_REBOOT);
}
else if (dohalt) {
+ BOOTTRACE("exec halt(8) -l...");
execle(_PATH_HALT, "halt", "-l", nosync,
(char *)NULL, empty_environ);
syslog(LOG_ERR, "shutdown: can't exec %s: %m.",
@@ -404,6 +415,7 @@ die_you_gravy_sucking_pig_dog(void)
warn(_PATH_HALT);
}
else if (dopower) {
+ BOOTTRACE("exec halt(8) -l -p...");
execle(_PATH_HALT, "halt", "-l", "-p", nosync,
(char *)NULL, empty_environ);
syslog(LOG_ERR, "shutdown: can't exec %s: %m.",
@@ -417,6 +429,7 @@ die_you_gravy_sucking_pig_dog(void)
_PATH_HALT);
warn(_PATH_HALT);
}
+ BOOTTRACE("SIGTERM to init(8)...");
(void)kill(1, SIGTERM); /* to single-user */
}
#endif