systemctl stop
이들그리고 그리고 의 차이점은 무엇인가요 systemctl kill
?
systemctl kill
-9
(SIGTERM) 대신 (SIGKILL) 과 같은 프로세스에 사용자 정의 신호 전송을 지원합니다 -15
. 그렇다면 항상 (SIGTERM)을 보내는 systemctl kill
보다 일반적인 버전의 유일한 차이점은 무엇입니까 ?systemctl stop
systemctl stop
-15
예를 들어 systemctl stop
( )와 같은 결과는 다음과 같습니다 systemctl kill
.ssh.service
sshd
systemctl stop
:
$ systemctl stop sshd
$ systemctl status sshd
● ssh.service - OpenBSD Secure Shell server
Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
Active: inactive (dead) since Mon 2021-11-08 09:09:32 CET; 1s ago
Docs: man:sshd(8)
man:sshd_config(5)
Process: 2086153 ExecStartPre=/usr/sbin/sshd -t (code=exited, status=0/SUCCESS)
Process: 2086154 ExecStart=/usr/sbin/sshd -D $SSHD_OPTS (code=exited, status=0/SUCCESS)
Main PID: 2086154 (code=exited, status=0/SUCCESS)
systemctl kill
:
$ systemctl kill sshd
$ systemctl status sshd
● ssh.service - OpenBSD Secure Shell server
Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
Active: inactive (dead) since Mon 2021-11-08 09:10:15 CET; 1s ago
Docs: man:sshd(8)
man:sshd_config(5)
Process: 2086486 ExecStartPre=/usr/sbin/sshd -t (code=exited, status=0/SUCCESS)
Process: 2086487 ExecStart=/usr/sbin/sshd -D $SSHD_OPTS (code=exited, status=0/SUCCESS)
Main PID: 2086487 (code=exited, status=0/SUCCESS)
답변1
systemctl kill
매우 유사하며 kill
단지 신호만 보냅니다(기본값=SIGTERM). kill
와 의 주요 차이점 systemctl kill
은 PID 대신 단위를 지정할 수 있으며 systemd는 해당 신호를 보내려는 프로세스를 이해한다는 것입니다.
반면에 systemctl stop
명령줄에 지정된 장치는 중지됩니다. systemd
모든 ExecStop=
행(있는 경우)이 먼저 실행됩니다. 프로세스가 남아 있으면 KillMode=
규칙을 사용하여 처리합니다. 그 후에는 전송됩니다 SIGTERM
(변경 가능 KillSignal=
). 설정 되면 SendSIGHUP=
즉시 SIGHUP을 보냅니다. 프로세스가 SIGTERM을 제대로 처리하지 못하고 90초 이내에 중지하지 못하는 경우 TimeoutStopSec=
SIGKILL(변경 가능)을 보냅니다(변경 가능 ) FinalKillSignal=
. 또한 KillMode=control-group
(기본값)이면 모든 하위 프로세스도 종료됩니다.
systemctl kill
그래서 이것이 단지 신호를 보내는 것임을 알 수 있습니다 . 이로 인해 장치가 중지될 수 있지만 systemd는 이러한 일이 발생하도록 보장하지 않습니다. 대신 systemctl stop
한 장치가 중지됩니다.
systemctl kill
다음을 가정하는 것과 동일합니다 systemctl stop
.
- 아니요
ExecStop=
KillSignal=
유닛 파일의--signal=
.- 장치는 첫 번째 신호(멈추지 않음)에 대한 응답이 보장되며 후속 작업이 필요하지 않습니다.
KillMode=
설정되지 않았거나 와 같습니다process
.
sshd.service의 특별한 점은 다음을 포함한다는 것입니다.
ExecReload=/usr/sbin/sshd -t
ExecReload=/bin/kill -HUP $MAINPID
이 경우 다음과 같이 질문할 수 있습니다. 이 두 명령의 차이점은 무엇입니까?
# systemctl reload sshd
# systemctl kill --signal=SIGHUP --kill-who=sshd.service
거의 동일하지만 차이점은 매우 분명합니다. 신호 전에 호출됩니다 reload
./usr/sbin/sshd -t
sshd.service의 또 다른 특별한 점은 고아 프로세스가 systemd에 의해 정리되지 않기 때문에 더 가까워지고 더 가까워진다는 것 KillMode=process
입니다 . 기본적으로 systemd는 고아가 된 모든 하위 프로세스를 정리합니다.systemctl kill
systemctl stop
KillMode=control-group
답변2
매뉴얼에 따르면 kill
:
kill
PATTERN...
하나 이상의 신호를 보냅니다.프로세스단위.--kill-who=
종료할 프로세스를 선택하는 데 사용됩니다 .--signal=
전송할 신호를 선택하는 데 사용됩니다 .
그리고 stop
:
stop
모드...
하나 이상을 중지(비활성화)합니다.단위명령줄에 지정됩니다.
따라서 kill
특정 유닛의 프로세스가 종료되고 stop
해당 유닛이 중지됩니다.
여기서 차이점을 확인할 수 있습니다.
# 프로세스가 종료되지 않습니다. $ sudo systemctl kill ufw $ sudo systemctl 상태 ufw ● ufw.service - 단순 방화벽 로드됨: 로드됨(/lib/systemd/system/ufw.service; 활성화됨, 공급업체 기본값: 활성화됨) 활성: 활성(종료)2021-11-08 월요일 05:47:44 -03 18초 전 이후; 문서: 사람: ufw(8) 프로세스: 48409 ExecStart=/lib/ufw/ufw-init가 자동으로 시작되었습니다(코드=종료, 상태=0/SUCCESS). 마스터 PID: 48409(코드=종료, 상태=0/성공) $ sudo ufw 상태 상태: 활성 하스터 작전 ----- ------ ----- 80 어디든 허용 ... $ sudo systemctl 재시작 ufw $ sudo systemctl 중지 ufw $ sudo systemctl 상태 ufw ● ufw.service - 단순 방화벽 로드됨: 로드됨(/lib/systemd/system/ufw.service; 활성화됨, 공급업체 기본값: 활성화됨) 활성: 비활성(죽음)2021-11-08 월요일 05:49:08 -03 1초 전 이후; 문서: 사람: ufw(8) 프로세스: 48785 ExecStart=/lib/ufw/ufw-init가 자동으로 시작되었습니다(코드=종료, 상태=0/SUCCESS) 프로세스: 48995 ExecStop=/lib/ufw/ufw-init 중지(코드=종료, 상태=0/성공) 마스터 PID: 48785(코드=종료, 상태=0/성공) $ sudo ufw 상태 상태: 비활성