How to shutdown a computer instantly (1 to 5 secs) without using a physical switch/socket?
Is there any command / program via which I may shutdown my system instantly (1 to 5 secs)?
Update (2015): Thank you to those who have suggested to turn off using the power socket. :D
Update (2016): @technophile suggested that I should add some information to the question describing nature of the problem - mainly which scenario was I trying to solve. Here is the scenario for which this question was asked some years ago.
We were building a system to be deployed in public spaces like (airports, hotels etc). People can use that system for internet surfing, checking their email or even bookings etc. using their credit cards. System built was making sure that a second user can in no way get information (email, credit cards) of the previous user of that system even if keyloggers kind of softwares somehow get installed. How was the system making sure of it? Well, details cannot be shared because that's not public info. but we developed a way to always have fresh Operating System (as if it was newly installed) for a new user of the system. Only problem was that we had to shutdown the machine and bring it up again as soon as first user leaves the machine.
And I wanted that shutdown to be instantly fast ( - that's why the question) and the next boot up to be very fast too for which I researched and tried large number of Linux distributions from Damn Small Linux to Slackware to Debian etc. but that's a separate story.
sudo shutdown -h now
I don't suggest to do the following if you are not forced by really special reasons:
kill -SEGV 1 # should generate a core dumps and kernel panic
kill -ABRT 1 # should generate a core dumps and kernel panic
kill -9 1 # On old systems worked nowadays not
It is rough, brutal and it can be considered a close equivalent of unplugging the power cord...
The correct way is shutdown -h now
with sudo
before when needed.
Maybe I should say the lawful way; see below or better tl;dr.
Some words more, aka The story, Chapter I
In the beginning was the init and it will be till the very end.
The whole Linux depends from the loving care of init [1] [2]. Nonetheless and not without a certain amount of ungratefulness, there was a time in which the good Lord root user can betray this love and suddenly kill
init with an incontrovertible (-9
) order.
(The Book of Etiquette prescribes for counts, dukes and marquises users to invoke before a sudo
).
Then some wizards made a charm to protect init (from the Book of man 2 init
)
The only signals that can be sent to process ID 1, the init process, are those for which init has explicitly installed signal handlers. This is done to assure the system is not brought down accidentally.
(Our spies report [U1] that init will handle 1 HUP 6 ABRT 11 SEGV 15 TERM 30 PWR 2 INT 10 USR1 14 ALRM 17 CHLD 32)
So the good Lord root user learn the news and change the command in kill -ABRT 1
or kill -SEGV 1
that usually generate a kernel panic and a core dump.
It works because init is the first process to run and takes the PID number 1 [2b].
This is unsafe, unwise and you feel it is herald of bad omen and a curse but if you cannot materially put the hands on and unplug it...
The curse: it will not write on the log, it will not kill all the processes & wait for their ending, it will not write on the HDD properly updating the inodes neither will it unmount the filesystems; don't even mind it will save the options of the graphical windows and the shell histories, and many other beyond our imagination... as we said a close equivalent of unplugging the power chord, or the battery if a laptop.
The correct way
"Non nobis, Domine, non nobis, sed nomini tuo da gloriam.", Templar knights motto.
The lawful (correct) way is to use shutdown
[3]
sudo shutdown -h now
shutdown arranges for the system to be brought down in a safe way. All logged-in users are notified that the system is going down and...
but with -h now
they will have no enough time to do so much...
Some words more, aka The story, Chapter II
Once upon a time some logic steps felt from the sky over the unix people:
Once system processes have been killed and filesystems have been unmounted, the system halts/powers off or reboots automatically. This is done using the halt or reboot command, which syncs changes to disks and then performs the actual halt/power off or reboot. [4]
Indeed, nowadays, we do not trust any more in the existence of the three Moirai [5] of the Linux world, reboot
,poweroff
and halt
[6]: the modern science of ls -l $(which poweroff halt reboot)
and the one of man reboot
, spreads new light on this dark age and reveal us that it exists only one true command that parses all their options so that we are finally free to ask for actions contradicting their commands names! (halt -p
or reboot -p
for poweroff
, shutdown -r
for reboot
...)
Now that all seemed to be clear and cosy for all, rumours claim [7] that in the underworld of systemd toolset [8] a revolution was performed leaving unaware the whole overworld. Thanks to an army of backwards compatibility shims we didn't notice at all that reboot, poweroff, halt [6] and even telinit [9] and shutdown [3] are all already bounded to the new king systemctl [10]. Please listen the whole story from the original voice of JdeBP The Bard [9] because I have no more breath.
If you are a followers of the Ubuntu cult you may still remain aware for a while of all those claims [11].
The middle Earth of halt -f
, init
, telinit
, systemctl
Searching for solution faster than the correct one but likewise wise.
systemctl --force --force poweroff # the most close to kill -9 1
systemctl --force poweroff # rough but still safe
sudo halt -f # rough
sudo telinit 0 # or 6 # safe
kill -SIGINT 1 # cause reboot as the reboot command
kill -SIGRTMIN+4 1 # cause shutdown as the halt command
That you are under systemd or not you should be able to stop the computer without invoking all the correct shudown procedures (and so more fast):
-
halt -f
: specifying the option-f
(note that you need-f
to avoid the shutdown procedure) with the above command, withsudo poweroff -f
or maybe even withsudo reboot -f -h
. Indeed we can read fromman reboot
(and equivalents) about the need to specify the option-f
to avoid to call the shutdown:When called with --force or when in runlevel 0 or 6, this tool invokes the reboot(2) system call itself (with REBOOTCOMMAND argument passed) and directly reboots the system.
Otherwise this simply invokes the shutdown(8) tool with the appropriate arguments without passing REBOOTCOMMAND argument.
-f, --force
Does not invoke shutdown(8) and instead performs the actual action you would expect from the name. -
Moreover you can use
telinit
[2b] (orinit
directly)sudo telinit 0 # or 6
to tell init to change runlevel... but if so why do not kill it directly?
-
Under systemd you can use the unwise double option
--force --force
systemctl --force --force poweroff
Reading from the systemctl manual [10]
-f, --force
When used with enable, overwrite any existing conflicting symlinks.
When used withhalt
,poweroff
,reboot
or kexec, execute the selected operation without shutting down all units. However, all processes will be killed forcibly and all file systems are unmounted or remounted read-only. This is hence a drastic but relatively safe option to request an immediate reboot. If --force is specified twice for these operations, they will be executed immediately without terminating any processes or unmounting any file systems. Warning: specifying --force twice with any of these operations might result in data loss.
Ps> Take inspiration about variants from the tail JdeBP The Bard [7].
You can power off the machine immediately without syncing disks by writing "o" to /proc/sysrq-trigger as root, or as any user with write permissions on that file.
As a shell script it would look something like
#!/bin/sh
echo o >/proc/sysrq-trigger
There is a sysctl option about sysrq, but option only affects triggering by keyboard.
If you would like to restart immediately instead of powering off, you can send "b" instead of "o"; but keep in mind that while sysrq-trigger is the fastest way to shut down, there may be faster ways to restart. Board firmware (BIOS/UEFI) can take a lot of time to reinitialize hardware, so it is usually faster to use kexec to effect the restart, because the hardware remains initialized.
As you probably know, this is not recommended in any case where you have a filesystem that is mounted as writable, even if you don't think you've written anything important to that filesystem while it was mounted. Even if you do not care about the integrity of data on that filesystem, shutting down or restarting like this can make booting up slower.
Make sure that none of your persistent filesystems are mounted as writable.