sshd 启动了两个进程,但 systemd 只停止了一个

sshd 启动了两个进程,但 systemd 只停止了一个

Linux Mint 18.3 sshd (7.2p2) 上有两个进程。但是当我运行时,service ssh stop只有子进程停止,而父进程仍在运行。因此,当我重新启动 ssh 服务时,它无法绑定 22 端口,并且无法接收连接。

我读过关于特权分离的文章,我认为它很好,尽管其他 Linux(例如 Ubuntu)只创建一个进程。但是为什么子进程停止时父进程不会停止?如何让 systemd 停止两个进程?

ssh 服务

[Unit]
Description=OpenBSD Secure Shell server
After=network.target auditd.service
ConditionPathExists=!/etc/ssh/sshd_not_to_be_run

[Service]
EnvironmentFile=-/etc/default/ssh
ExecStartPre=/usr/sbin/sshd -t
ExecStart=/usr/sbin/sshd -D $SSHD_OPTS
ExecReload=/usr/sbin/sshd -t
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartPreventExitStatus=255
Type=notify

[Install]
WantedBy=multi-user.target
Alias=sshd.service

多用户目标

#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.

[Unit]
Description=Multi-User System
Documentation=man:systemd.special(7)
Requires=basic.target
Conflicts=rescue.service rescue.target
After=basic.target rescue.service rescue.target
AllowIsolate=yes

服务 ssh 状态

service ssh status
● ssh.service - OpenBSD Secure Shell server
   Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
   Active: active (running) since Чт 2019-05-16 16:53:10 MSK; 6 days ago
  Process: 4535 ExecStartPre=/usr/sbin/sshd -t (code=exited, status=0/SUCCESS)
 Main PID: 4538 (sshd)
    Tasks: 2
   Memory: 16.4M
      CPU: 3.143s
   CGroup: /system.slice/ssh.service
           ├─4538 /usr/sbin/sshd -D
           └─4539 /usr/sbin/sshd -D

答案1

Systemd 选项“KillMode”有选项“mixed”:

如果设置为混合,则 SIGTERM 信号(见下文)将发送到主进程,而后续的 SIGKILL 信号(见下文)将发送到该单元控制组的所有剩余进程

除了“KillMode”之外还有另一个选项“control-group”

如果设置为控制组,则该单元控制组中的所有剩余进程将在单元停止时被终止(对于服务:在执行停止命令后,使用 ExecStop= 配置)

因此我只是找出所有服务文件中哪个使用得更频繁,它是“混合”,我只需将“KillMode = process”替换为“KillMode = mixed”。

相关内容