<html>
    <head>
      <base href="https://bugs.freedesktop.org/" />
    </head>
    <body><table border="1" cellspacing="0" cellpadding="8">
        <tr>
          <th>Bug ID</th>
          <td><a class="bz_bug_link 
          bz_status_NEW "
   title="NEW - A hanging shell process remains after exiting rescue mode with suggested `systemctl default'"
   href="https://bugs.freedesktop.org/show_bug.cgi?id=90793">90793</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>A hanging shell process remains after exiting rescue mode with suggested `systemctl default'
          </td>
        </tr>

        <tr>
          <th>Product</th>
          <td>systemd
          </td>
        </tr>

        <tr>
          <th>Version</th>
          <td>unspecified
          </td>
        </tr>

        <tr>
          <th>Hardware</th>
          <td>Other
          </td>
        </tr>

        <tr>
          <th>OS</th>
          <td>All
          </td>
        </tr>

        <tr>
          <th>Status</th>
          <td>NEW
          </td>
        </tr>

        <tr>
          <th>Severity</th>
          <td>normal
          </td>
        </tr>

        <tr>
          <th>Priority</th>
          <td>medium
          </td>
        </tr>

        <tr>
          <th>Component</th>
          <td>general
          </td>
        </tr>

        <tr>
          <th>Assignee</th>
          <td>systemd-bugs@lists.freedesktop.org
          </td>
        </tr>

        <tr>
          <th>Reporter</th>
          <td>rootlexx@mail.ru
          </td>
        </tr>

        <tr>
          <th>QA Contact</th>
          <td>systemd-bugs@lists.freedesktop.org
          </td>
        </tr></table>
      <p>
        <div>
        <pre>Created <span class=""><a href="attachment.cgi?id=116188" name="attach_116188" title="Interactive shell bash (618) strace output">attachment 116188</a> <a href="attachment.cgi?id=116188&action=edit" title="Interactive shell bash (618) strace output">[details]</a></span>
Interactive shell bash (618) strace output

When entering the rescue mode, the welcome message suggests using `systemctl
default' to enter default mode. However, though it indeed proceeds with normal
bootup, it results in a hanging interactive rescue shell process remaining,
grabbing the tty and thus preventing the login prompt from appearing. One has
to hit SAK to kill it.

The reason seems to be the KillMode=process directive used in rescue.service.
Here is its' status when active:

--------------------------------- >8 ---------------------------------
* rescue.service - Rescue Shell
   Loaded: loaded (/lib/systemd/system/rescue.service; static)
   Active: active (running) since Sun 2015-05-31 12:47:04 UTC; 3min 55s ago
     Docs: man:sulogin(8)
  Process: 614 ExecStartPre=/bin/echo -e Welcome to rescue mode! Type
"systemctl default" or ^D to enter default mode.\nType "journalctl -xb" to view
system logs. Type "systemctl reboot" to reboot. (code=exited, status=0/SUCCESS)
  Process: 609 ExecStartPre=/bin/plymouth quit (code=exited, status=1/FAILURE)
 Main PID: 617 (sh)
   CGroup: /system.slice/rescue.service
           |-617 /bin/sh -c /sbin/sulogin; /bin/systemctl --fail --no-block
default
           `-618 bash
--------------------------------- 8< ---------------------------------

/bin/sh (617) is the main process here, and the only one the termination signal
is sent to. The real interactive shell is the bash (618) process.

When one runs `systemctl default', it isolates default.target, stopping
rescue.service. /bin/sh (617) then recieves SIGHUP, but doesn't resend it to
its children. bash man page says:

 "The  shell  exits by default upon receipt of a SIGHUP.  Before exiting,
  an interactive shell  resends  the  SIGHUP  to  all  jobs,  running  or
  stopped."

/bin/sh (617) is not interactive, so this seems to be the reason for not
resending SIGHUP.

As a result, the interactive shell bash (618) remains stuck trying to read the
stdin (see the attached `bash (618) strace' file). Here is the status of
rescue.service at this point:

--------------------------------- >8 ---------------------------------
● rescue.service - Rescue Shell
   Loaded: loaded (/lib/systemd/system/rescue.service; static)
   Active: inactive (dead) since Sun 2015-05-31 12:53:55 UTC; 3min 25s ago
     Docs: man:sulogin(8)
  Process: 617 ExecStart=/bin/sh -c /sbin/sulogin; /bin/systemctl --fail
--no-block default (code=killed, signal=TERM)
  Process: 614 ExecStartPre=/bin/echo -e Welcome to rescue mode! Type
"systemctl default" or ^D to enter default mode.\nType "journalctl -xb" to view
system logs. Type "systemctl reboot" to reboot. (code=exited, status=0/SUCCESS)
  Process: 609 ExecStartPre=/bin/plymouth quit (code=exited, status=1/FAILURE)
 Main PID: 617 (code=killed, signal=TERM)
--------------------------------- 8< ---------------------------------

systemd-cgls output contains the following:

--------------------------------- >8 ---------------------------------
├─1 /sbin/init
├─system.slice
...
│ ├─rescue.service
│ │ └─618 bash
...
--------------------------------- 8< ---------------------------------

/bin/sh is dash (Debian default system shell), but I've tried bash, too, and it
behaved the same.

Exiting the rescue shell with `exit' or ^D instead of `systemctl default' works
fine.

I've tried copying rescue.service to /etc/systemd/system/ and commenting out
the KillMode=process directive, and it fixed the problem. (Moving
`/bin/systemctl --fail --no-block default' to ExecStopPost= and making
/sbin/sulogin the main process should help, too, but I didn't try it.)

emergency.service also contains KillMode=process, so it may be affected, too.

======================================================================
----------------------[ systemctl --version ]-------------------------
systemd 215
+PAM +AUDIT +SELINUX +IMA +SYSVINIT +LIBCRYPTSETUP +GCRYPT +ACL +XZ -SECCOMP
-APPARMOR

------------------------[ /etc/os-release ]---------------------------
PRETTY_NAME="Debian GNU/Linux 8 (jessie)"
NAME="Debian GNU/Linux"
VERSION_ID="8"
VERSION="8 (jessie)"
ID=debian
HOME_URL="<a href="http://www.debian.org/">http://www.debian.org/</a>"
SUPPORT_URL="<a href="http://www.debian.org/support/">http://www.debian.org/support/</a>"
BUG_REPORT_URL="<a href="https://bugs.debian.org/">https://bugs.debian.org/</a>"

---------[ dpkg-query -Wf '${Package}\t${Version}\n' bash dash ]------
bash    4.3-11+b1
dash    0.5.7-4+b1</pre>
        </div>
      </p>
      <hr>
      <span>You are receiving this mail because:</span>
      
      <ul>
          <li>You are the QA Contact for the bug.</li>
          <li>You are the assignee for the bug.</li>
      </ul>
    </body>
</html>