[PATCH] Shutdown cooloff feature
CmdLnKid
cmdlnkid at gmail.com
Tue Sep 29 09:55:16 UTC 2009
On Tue, 29 Sep 2009 04:16 -0000, danny wrote:
>
>> 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 at 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 at freebsd.org mailing list
>> http://lists.freebsd.org/mailman/listinfo/freebsd-current
>> To unsubscribe, send any mail to "freebsd-current-unsubscribe at freebsd.org"
>> --------------090504090807040407080107--
>>
>
>
> _______________________________________________
> freebsd-current at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-current
> To unsubscribe, send any mail to "freebsd-current-unsubscribe at freebsd.org"
>
How about adding this as a kernel tunable that could be placed in
/boot/loader.conf or tuned via sysctl during operation and then instead of
having it act upon someone issuing the shutdown command which is a pretty hard
thing to accidentally do, have it act on the three finger salute aka:
ctrl+alt+del.
Personally I would love to have something like this in place that could have a
adjustable time limit or reasonable default time limit that could actually give
a sysop time to react.
Just my thoughts.
--
- (2^(N-1))
More information about the freebsd-current
mailing list