我有一个由 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。