linux 中,执行sh脚本时,如何先杀掉当前运行的程序,在重新打开程序

比如我想定时重启 a.jar ,那我就会做一个 SH 脚本,然后做任务计划,定时执行SH脚本;

但是最近发现这样一个问题, a.jar 会卡死,当他卡死的之后,任务计划在执行 SH 时,就没反应了

现在是想,在执行 SH 时,先判断 a.jar 是否运行,没运行,就启动;如果在运行,就杀掉进程,在重新启动。

在线等,该脚本该如何写呢。

假设你的a.jar的进程名叫做 ajar

 #!/usr/bin/env bash

records=$(ps -eo pid,fname | grep -w ajar)

for record in $records
do
    if [[ $record != *[!0-9]* ]];  then
        kill ${record}
    fi
done

这样可以检测到名为ajar的进程(grep 的-w 开关为精确匹配,防止误杀,进程名最长8位字符,超过8位请抛弃该开关),然后杀掉