我有一个包含以下代码的作业调度程序bash shell脚本:
for (( i=0; i<$toBeDoneNum; i=i+1 ))
do
while true
do
processNum=`ps aux | grep Checking | wc -l`
if [ $processNum -lt $maxProcessNum ]; then
break
fi
echo "Too many processes: Max process is $maxProcessNum."
sleep $sleepSec
done
java -classpath ".:./conf:./lib/*" odx.comm.cwv.main.Checking $i
done
我像这样运行脚本在后台:
./dispatcher.sh &
我想用kill -9终止这个调度程序进程。但我没有在第一时间记录调度员流程的pid。相反,我使用工作来显示所有过程,但它没有显示任何内容。即便是这个fg也无法将这个过程带到前台。
fg
bash: fg: current: no such job
但我认为这个调度程序进程仍在运行,因为它仍然继续分配java程序来运行。我该如何终止这个作业调度程序bash shell脚本进程?
编辑:我使用了工作,工作-l,工作-r和工作-s。没有任何表现。
答案 0 :(得分:0)
创建包含内容的test.sh
sleep 60
然后
jobs -l | grep 'test.sh &' | grep -v grep | awk '{print $2}'
这给了我Ubuntu和OSX上的进程ID
您可以将其分配给变量然后将其删除
pid=`jobs -l | grep 'test.sh &' | grep -v grep | awk '{print $2}'`
kill -9 $pid