【发布时间】:2015-05-28 18:55:28
【问题描述】:
我正在尝试编写一个脚本来查找之前运行的另一个脚本的 PID。一旦找到该PID,它就会发送一个终止信号。
我可以找到 PID,但没有处理终止信号,我收到一条返回消息,表明它不是 PID。
这是我正在做的事情:
#!/bin/bash
PID=`ps -eaf | grep "start.sh" | awk '{print $2}'`
echo "$PID"
if [[ -z "$PID" ]];
then(
echo "Start script is not running!"
)else(
kill -9 $PID
)fi
它试图杀死的脚本会启动许多其他脚本,所以我希望杀死 start.sh 会杀死所有子进程。
【问题讨论】:
-
您是否考虑过使用
killall命令按名称而不是按PID 杀死进程? -
你知道
pkill吗? -
我试过“killall start.sh”,它返回“找不到进程”。这就是我试图杀死 PID 的原因。
-
Shell 脚本不使用
(和)来分隔这样的块。删除它们。还要避免使用 ALL_CAPS 变量。它们通常保留给 shell/系统使用(也通常用于导出的变量)。 -
我也尝试过 pkill ,但这不是处理它。当我运行 top 时,它仍然显示为正在运行。