나는 보통로 프로세스를 죽인다 killall
.
killall markdoc
그러나이 명령이 프로세스를 정상적으로 종료하는지 확실하지 않습니다. 이 명령이 정상적으로 종료됩니까? 그렇지 않다면 어떻게 이름을 가진 프로세스를 정상적으로 죽일 수 있습니까?
나는 보통로 프로세스를 죽인다 killall
.
killall markdoc
그러나이 명령이 프로세스를 정상적으로 종료하는지 확실하지 않습니다. 이 명령이 정상적으로 종료됩니까? 그렇지 않다면 어떻게 이름을 가진 프로세스를 정상적으로 죽일 수 있습니까?
답변:
당신의 질문은 명확하지 않습니다, 당신은 제목에서 데몬에 대해 이야기하지만 본문에서는 일반적인 프로세스에 대해서만 이야기합니다.
데몬의 경우 데비안과 같이 데몬을 중지시키는 특별한 방법이 있습니다.
service daemon-name stop
또는
/etc/init.d/daemon-name stop
다른 배포판 / OS에서 사용되는 다른 initscript 표준에 대해서도 비슷한 구문이 있습니다.
비 데몬 프로세스를 종료하려면 제어 할 수없는 방식으로 가정 killall
하거나 pkill
, 기본적으로 SIGTERM
(15) 신호 를 사용한다고 가정 할 때 또는를 안전하게 사용할 수 있으며 , 적절하게 작성된 모든 응용 프로그램은이 신호를 수신하면 정상적으로 종료해야합니다. . 동일한 이름을 가진 프로세스가 많은 경우 이러한 유틸리티가 하나 이상의 프로세스를 종료 할 수 있다는 점을 고려하십시오.
그래도 문제가 해결되지 않으면 SIGINT
(2), SIGHUP
(1) 및 마지막 수단으로 시도하십시오 SIGKILL
(9). 이 마지막 신호는 응용 프로그램에서 포착 할 수 없으므로 정리를 수행 할 수 없습니다. 이러한 이유로 가능할 때마다 피해야합니다.
모두 pkill
와 killall
같이 형식의 신호 매개 변수를 승인합니다 -NAME
.
pkill -INT process-name
markdoc serve &
및 svnserve -d
. 나는 일종의 데몬이라고 생각하지만, 나에게는 확실하지 않았다 :)
killall
살인자입니다!
BSD와 같은 배포판 및 기타 배포판에서 /etc/rc.d/에는 대개 시스템의 데몬 시작, 재시작 및 중지를 관리하는 스크립트가 있습니다. 데몬을 멈추려면 다음과 같이 절대 경로를 사용하여 스크립트를 호출하십시오.
# /etc/rc.d/acpid stop
또는 다음 명령을 사용하십시오.
# rc.d stop acpid
시스템 시작 및 중지 데몬을 보여주기 위해이 스크립트를 사용하는 것이 좋습니다.
#!/bin/bash
chk_status(){
target=$1
if [[ $target != "functions" && $target != "functions.d" ]]
then
if [[ -f "/var/run/daemons/$target" ]]
then
stat="\e[1;32m[RUNNING]"
else
stat="\e[1;31m[STOPPED]"
fi
printf "$stat \t\e[1;34m$target\e[0;0m\n"
fi
}
daemons=($(for daemon in /etc/rc.d/*; do echo "${daemon#\/etc\/rc.d\/}"; done))
if [[ $1 != "" ]]
then
chk_status $1
else
for d in "${daemons[@]}"; do
chk_status $d
done | sort
fi