因为无限循环而杀死父母和孩子

因为无限循环而杀死父母和孩子

我有一个由 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--标记选项参数的结束: 之后的任何参数--,即使以 开头-,也不会被视为选项。如果没有---$PPID将会被视为要发送的信号。

恕我直言,SIGKILL 太强了。以 SIGINT 或 SIGHUP 开头,或默认的 SIGTERM。

相关内容