From 882c25fcee8c6f8c4420a137fa2301c455c638fd Mon Sep 17 00:00:00 2001 From: Aaron Ball Date: Wed, 20 Jan 2021 19:13:52 -0700 Subject: Convert linux manual restart with sysrq from adoc to rst --- posts/linux:manual_restart_with_sysrq-trigger.adoc | 106 --------------------- posts/linux:manual_restart_with_sysrq-trigger.rst | 102 ++++++++++++++++++++ 2 files changed, 102 insertions(+), 106 deletions(-) delete mode 100644 posts/linux:manual_restart_with_sysrq-trigger.adoc create mode 100644 posts/linux:manual_restart_with_sysrq-trigger.rst diff --git a/posts/linux:manual_restart_with_sysrq-trigger.adoc b/posts/linux:manual_restart_with_sysrq-trigger.adoc deleted file mode 100644 index 38a54eb..0000000 --- a/posts/linux:manual_restart_with_sysrq-trigger.adoc +++ /dev/null @@ -1,106 +0,0 @@ -Linux:Manual Restart with sysrq-trigger -======================================= -:author: Aaron Ball -:email: nullspoon@oper.io -:revdate: February 15, 2016 - - - -A little over a week ago I decided it would be fun to try to write my own -multi-threaded init system in c. Without going into too much detail (I'll write -a blog post that introduces it once it's further along), I needed to find a way -to shutdown and restart my system from c (init 0 and 6, respectively). - -I looked around the internet and had a surprisingly difficult time finding what -I was looking for. Every post I found indicated I should use the system -function to call "shutdown -h -P now". While not a wrong or a bad answer, it -wasn't the answer I was looking for. I wanted to know how the shutdown and -reboot commands worked, or how my current init system executed runlevels 0 and -6, respectively. - -Remembering something I found a ways back about kernel triggers found in and -/sys/power/ for controlling acpi states, I started searching for something -similar. After a bit of time, I found */proc/sysrq-trigger*. For further -reading beyond this post, please see the -https://en.wikipedia.org/wiki/Magic_SysRq_key[Wikipedia Article]. - - - -Simple Usage ------------- - -The usage of sysrq-trigger is fairly simple. Before we get into exact usage for -the purposes of shutting down or rebooting though, please note that output from -/proc/sysrq-trigger can only be seen from an actual tty, and not from within a -terminal emulator. - -That said, execute the following command to find out all of the options -available to you from sysrq. - - # echo h > /proc/sysrq-trigger - -If you don't see output from that, either sysrq isn't enabled, or you aren't -executing from within a tty. - -To check if it is enabled, ensure that the following command yields a *1*. - - # cat /proc/sys/kernel/sysrq - - - -Reboot and Shutdown Sequences ------------------------------ - -If you executed the _echo h_ statement above, you likely saw the output of -supported commands. Among them you should havE seen *b* and *o*, for reboot and -poweroff, respectively. _Note that it is a bad idea to execute either of these -right now._ - -If you read around the internet for what these two do, you'll see that both -cause a hard stop. Neither polietly asks processes to exit. They are roughly -equivelant to the hardware reset and power buttons. If rebooting or powering -off, *we want b or o to be the last command sent* to have as graceful a stop as -possible. - - -Here is the list of commands that should be sent to sysrq-trigger, in order, -for both a shutdown and a reboot. - -echo r > /proc/sysrq-trigger:: (un*R*aw) Takes back control of keyboard from X - -echo e > /proc/sysrq-trigger:: (t*E*rminate) Send SIGTERM to all processes. If - you aren't familiar with process signals, this - is basically a friendly kill command for every - process. - -echo i > /proc/sysrq-trigger:: (k*I*ll) Send SIGKILL to all processes. If you - aren't familiar with process signals, this is - basically a kill -9 command for every remaining - process. - -echo s > /proc/sysrq-trigger:: (*S*nc) Sync all cached disk operations to disk - -echo u > /proc/sysrq-trigger:: (*U*mount) Umounts all mounted partitions - - -The previous commands all get us to a ready to shutdown or reboot state. To -shutdown or reboot, execute one of the following. - -echo o > /proc/sysrq-trigger:: (p*O*weroff) Powers off the system - -echo b > /proc/sysrq-trigger:: (re*B*oot) Reboots the system - - -The entire list in order, using the reboot command... - - # echo r > /proc/sysrq-trigger - # echo e > /proc/sysrq-trigger - # echo i > /proc/sysrq-trigger - # echo s > /proc/sysrq-trigger - # echo u > /proc/sysrq-trigger - # echo b > /proc/sysrq-trigger - - -[role="datelastedit"] -Last edited: {revdate} -// vim: set syntax=asciidoc: diff --git a/posts/linux:manual_restart_with_sysrq-trigger.rst b/posts/linux:manual_restart_with_sysrq-trigger.rst new file mode 100644 index 0000000..6923536 --- /dev/null +++ b/posts/linux:manual_restart_with_sysrq-trigger.rst @@ -0,0 +1,102 @@ +Linux:Manual Restart with sysrq-trigger +======================================= + +A little over a week ago I decided it would be fun to try to write my own +multi-threaded init system in c. Without going into too much detail (I'll write +a blog post that introduces it once it's further along), I needed to find a way +to shutdown and restart my system from c (init 0 and 6, respectively). + +I looked around the internet and had a surprisingly difficult time finding what +I was looking for. Every post I found indicated I should use the system +function to call "shutdown -h -P now". While not a wrong or a bad answer, it +wasn't the answer I was looking for. I wanted to know how the shutdown and +reboot commands worked, or how my current init system executed runlevels 0 and +6, respectively. + +Remembering something I found a ways back about kernel triggers found in and +/sys/power/ for controlling acpi states, I started searching for something +similar. After a bit of time, I found ``/proc/sysrq-trigger``. For further +reading beyond this post, please see the `Wikipedia Article +`_. + + + +Simple Usage +------------ + +The usage of sysrq-trigger is fairly simple. Before we get into exact usage for +the purposes of shutting down or rebooting though, please note that output from +``/proc/sysrq-trigger`` can only be seen from an actual tty, and not from +within a terminal emulator. + +That said, execute the following command to find out all of the options +available to you from sysrq. + +:: + + # echo h > /proc/sysrq-trigger + +If you don't see output from that, either sysrq isn't enabled, or you aren't +executing from within a tty. + +To check if it is enabled, ensure that the following command yields a ``1``. + +:: + + # cat /proc/sys/kernel/sysrq + + + +Reboot and Shutdown Sequences +----------------------------- + +If you executed the ``echo h`` statement above, you likely saw the output of +supported commands. Among them you should have seen ``b`` and ``o``, for reboot +and poweroff, respectively. **Note** that it is a bad idea to execute either of +these right now. + +If you read around the internet for what these two do, you'll see that both +cause a hard stop. Neither polietly asks processes to exit. They are roughly +equivelant to the hardware reset and power buttons. If rebooting or powering +off, *we want b or o to be the last command sent* to have as graceful a stop as +possible. + + +Here is the list of commands that should be sent to sysrq-trigger, in order, +for both a shutdown and a reboot. + +* ``echo r > /proc/sysrq-trigger``: (un**R**aw) Takes back control of keyboard + from X + +* ``echo e > /proc/sysrq-trigger``: (t**E**rminate) Send SIGTERM to all + processes. If you aren't familiar with process signals, this is basically a + friendly kill command for every process. + +* ``echo i > /proc/sysrq-trigger``: (k**I**ll) Send SIGKILL to all processes. + If you aren't familiar with process signals, this is basically a kill -9 + command for every remaining process. + +* ``echo s > /proc/sysrq-trigger``: (**S**nc) Sync all cached disk operations + to disk + +* ``echo u > /proc/sysrq-trigger``: (**U**mount) Umounts all mounted partitions + + +The previous commands all get us to a ready to shutdown or reboot state. To +shutdown or reboot, execute one of the following. + +``echo o > /proc/sysrq-trigger``: (p**O**weroff) Powers off the system + +``echo b > /proc/sysrq-trigger``: (re**B**oot) Reboots the system + + +The entire list in order, using the reboot command... + +.. code-block:: sh + + echo r > /proc/sysrq-trigger + echo e > /proc/sysrq-trigger + echo i > /proc/sysrq-trigger + echo s > /proc/sysrq-trigger + echo u > /proc/sysrq-trigger + echo b > /proc/sysrq-trigger -- cgit v1.2.3