linux - 如何在 Linux 后台终止作业调度程序?

标签 linux bash shell unix process

我有一个作业调度程序 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/

相关文章:

linux - 使用 find 将参数传递给并行程序

regex - Bash:需要在文本中的匹配大括号(圆括号)内查找文本

linux 如何在循环函数中使用 grep 作为变量

shell - Ansible执行命令

python - 如何在 Python 中正确写入 FIFO?

c++ - 取消套接字轮询操作

linux - 终端中字符编码的上下文感知切换

java - 当我在java中运行sshpass命令时找不到它

linux - (Linux) 如何在没有显示环境的情况下运行gtk 程序? Gtk 警告 ** : cannot open display:

mysql - 通过SSH将数据库表单独导出到sql文件