무한루프 때문에 부모와 자식을 죽인다

무한루프 때문에 부모와 자식을 죽인다

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으로 시작합니다.

관련 정보