mata pai e filho porque loop infinito

0

Eu tenho um processo executado pelo cron a cada hora. Esse processo chama outro (não originado), ou seja: ./childProc.sh (não tenho certeza se esse detalhe é importante)

Por causa de um loop infinito no processo filho (que ainda estou tentando descobrir por que ele não termina), tenho que matar todos os processos relacionados antes de executá-lo novamente.

Encontrei este postar e este artigo (seção Kill PPIDs) , mas eu não entendo a diferença entre: kill -9 -$PPID e kill -9 -- -$PPID .

Minhas perguntas são:
O que significa aqui -- ? Por outro lado, é -9 (SIGKILL) o sinal certo para matar um processo de script ou é muito strong?

Por fim, minha abordagem para verificar esse comportamento (se um processo ainda está em execução) está criando um arquivo que contém PID e 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; 

O que você acha? Alguma melhoria?

    
por Albert 24.12.2014 / 14:44

1 resposta

2

Não há diferença entre kill -9 -$PPID e kill -9 -- -$PPID .

Existe uma diferença entre kill -$PPID e kill -- -$PPID . O -- marca o final dos argumentos da opção: qualquer argumento após -- , mesmo que comece com - , não será tratado como uma opção. Sem o -- , o -$PPID será tratado como o sinal a ser enviado.

IMHO SIGKILL é muito strong. Comece com SIGINT ou SIGHUP, ou o padrão, SIGTERM.

    
por 24.12.2014 / 15:12