我有一个作业调度程序 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 终止这个调度程序进程。但我第一时间没有记录dispatcher进程的pid。相反,我使用 jobs 来显示所有过程,但它什么也没显示。即使这个 fg 也无法将进程带到前台。
fg
bash: fg: current: no such job
但是我认为这个调度程序进程仍在运行,因为它仍然继续分配java程序运行。我应该如何终止这个作业调度程序 bash shell 脚本进程?
编辑:我使用了 jobs、jobs -l、jobs -r 和 jobs -s。什么也没显示。
最佳答案
创建包含内容的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
关于linux - 如何在 Linux 后台终止作业调度程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21083027/