Date: Tue, 29 Sep 2009 10:16:26 +0200 From: Daniel Braniss <danny@cs.huji.ac.il> To: d@delphij.net Cc: FreeBSD Current <freebsd-current@freebsd.org> Subject: Re: [PATCH] Shutdown cooloff feature Message-ID: <E1MsXso-0005Eg-CY@kabab.cs.huji.ac.il> In-Reply-To: <4AC141B0.4090705@delphij.net> References: <4AC141B0.4090705@delphij.net>
next in thread | previous in thread | raw e-mail | index | archive | help
> Hi, > > I'm not sure if anyone would find this useful: > > - If a shutdown is initiated from a tty -and- > - It's not a restart -and- > - The time parameter is set to "now" > > Then, the shutdown(8) program would give something like this: > > Shutting down <hostname> NOW, press ^C within 5 seconds to cancel... > > So the user would get a chance to terminate it before it's too late. > I know we are living in a virtual world, where even shutting down a computer is just a 'wish', but lets keep some sanity, now means now. On the other hand, you could make it conditional, say an environment variable 'GREENOPERATOR', in which case now would mean soon ... :-) danny > Cheers, > - -- > Xin LI <delphij@delphij.net> http://www.delphij.net/ > FreeBSD - The Power to Serve! > -----BEGIN PGP SIGNATURE----- > Version: GnuPG v2.0.12 (FreeBSD) > > iEYEARECAAYFAkrBQa8ACgkQi+vbBBjt66D5iQCgmISna2P4CbX9qob5SuetGuoy > nUUAn0BtA/67Lyy8+91JppokUE57c/Ew > =Aytq > -----END PGP SIGNATURE----- > > --------------090504090807040407080107 > Content-Type: text/plain; > name="shutdown-cooloff.diff" > Content-Transfer-Encoding: 7bit > Content-Disposition: inline; > filename="shutdown-cooloff.diff" > > Index: shutdown.c > =================================================================== > --- shutdown.c (revision 197578) > +++ shutdown.c (working copy) > @@ -103,6 +103,7 @@ static void timewarn(int); > static void usage(const char *); > > extern const char **environ; > +static char hostname[MAXHOSTNAMELEN]; > > int > main(int argc, char **argv) > @@ -159,6 +160,7 @@ main(int argc, char **argv) > if (nosync != NULL && !oflag) > usage("-n requires -o"); > > + gethostname(hostname, sizeof(hostname)); > getoffset(*argv++); > > if (*argv) { > @@ -193,8 +195,22 @@ main(int argc, char **argv) > > if (offset) > (void)printf("Shutdown at %.24s.\n", ctime(&shuttime)); > - else > + else { > + /* > + * Safe belt when the operation is going to happen > + * immediately from a tty. > + */ > + if (doreboot != 1) { > + if (isatty(STDIN_FILENO)) { > + printf("Shutting down %s NOW, press ^C within " > + "5 seconds to cancel...", hostname); > + fflush(stdout); > + sleep(5); > + printf(" going ahead!\n"); > + } > + } > (void)printf("Shutdown NOW!\n"); > + } > > if (!(whom = getlogin())) > whom = (pw = getpwuid(getuid())) ? pw->pw_name : "???"; > @@ -271,14 +287,9 @@ static const char *restricted_environ[] = { > static void > timewarn(int timeleft) > { > - static int first; > - static char hostname[MAXHOSTNAMELEN + 1]; > FILE *pf; > char wcmd[MAXPATHLEN + 4]; > > - if (!first++) > - (void)gethostname(hostname, sizeof(hostname)); > - > /* undoc -n option to wall suppresses normal wall banner */ > (void)snprintf(wcmd, sizeof(wcmd), "%s -n", _PATH_WALL); > environ = restricted_environ; > > --------------090504090807040407080107 > Content-Type: text/plain; charset="us-ascii" > MIME-Version: 1.0 > Content-Transfer-Encoding: 7bit > Content-Disposition: inline > > _______________________________________________ > freebsd-current@freebsd.org mailing list > http://lists.freebsd.org/mailman/listinfo/freebsd-current > To unsubscribe, send any mail to "freebsd-current-unsubscribe@freebsd.org" > --------------090504090807040407080107-- >
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?E1MsXso-0005Eg-CY>