cron에 의해 매시간 실행되는 프로세스가 있습니다. 이러한 프로시저는 다른 프로시저(소스가 제공되지 않음)를 호출합니다. 즉: ( ./childProc.sh
이 세부 사항이 중요한지 확실하지 않음)
자식 프로세스에 무한 루프가 있으므로(아직도 왜 끝나지 않는지 알아내려고 노력하고 있습니다) 다시 실행하기 전에 관련 프로세스를 모두 종료해야 합니다.
찾았어요이 게시물그리고이 글(PPID 부분 죽이기)kill -9 -$PPID
, 하지만 : 과 의 차이점을 이해하지 못합니다 kill -9 -- -$PPID
.
내 질문은 :
여기서는 무엇을 의미합니까 --
? 반면에 -9 (SIGKILL)
이것이 bash 스크립트 프로세스를 종료하는 올바른 신호입니까, 아니면 너무 강력합니까?
마지막으로 동작(프로세스가 여전히 실행 중인지 여부)을 확인하는 방법은 PID와 PPID가 포함된 파일을 만드는 것이었습니다.
#!/bin/bash
# PID FILE
PID_FILE="$BASE_BACKUP_DIR"/".pid.$HOSTNAME";
## If exists PID_FILE, kill
if [[ -f "PID_FILE" ]]; then
pid_last=$(head -1 | cut -d " " -f1);
ppid_last=$(head -1 | cut -d " " -f2);
echoErr "Process is still running. Parent $ppid_last, child: $pid_last. ";
kill -9 -- -"$ppid_last";
fi;
## Create PID file
echo "$$ $PPID" > "$PID_FILE";
####### All process #######
# at the end, delete PID_FILE
rm -f "$PID_FILE";
exit 0;
어떻게 생각하나요? 개선된 점이 있나요?
답변1
kill -9 -$PPID
사이에는 차이가 없습니다 kill -9 -- -$PPID
.
거기예kill -$PPID
와 의 차이점은 다음과 같습니다 kill -- -$PPID
. --
옵션 인수의 끝을 표시합니다. this 이후의 인수 --
는 로 시작하더라도 -
옵션으로 간주되지 않습니다. 그렇지 않은 경우 --
전송 -$PPID
되는 신호로 처리됩니다.
IMHO, SIGKILL이 너무 강해요. SIGINT, SIGHUP 또는 기본 SIGTERM으로 시작합니다.