首页 > 解决方案 > 如何用一个脚本杀死多个 PID 并使其返回提示

问题描述

我有两个 PID 在我的 linux 服务器中运行。

当我执行以下命令时,他们会返回 PID:

pgrep -f -d ' ' /'main.py'

4752 4768

他们在这里使用命令:ps -ef | grep main.py

ubuntu    4752  4749  3 08:07 pts/1    00:00:04 python /home/ubuntu/deploy/main.py 
ubuntu    4768  4752  5 08:07 pts/1    00:00:05 /home/ubuntu/venvs/myvirtual/bin/python /home/ubuntu/deploy/main.py

现在,我想编写一个小的 shell 脚本,当我运行它时,它会杀死两个 PID。我的脚本如下所示:

#!/bin/sh

PID=`pgrep -f -d ' ' /'main.py'`

if [ -z "$PID" ]; then
    echo "no pid found for main.py"
else
    echo -ne '\n' | nohup kill -KILL $PID 1>&2 &
fi

问题是,当我运行这个脚本 (./shutdown.sh) .. 它首先打印这个:

-bash: line 56:  4727 Killed   nohup python ~/deploy/main.py > /home/ubuntu/main.log 2>&1

...然后我必须按 [ENTER] 才能返回提示,然后打印:

[1]+  Exit 137  . ~/venvs/myvirtual/bin/activate && nohup python ~/deploy/main.py > /home/ubuntu/main.log 2>&1  (wd: ~/deploy)
(wd now: ~)

1)如何让它杀死 PID 并干净地返回提示,而无需在脚本运行后按 RETURN 按钮?

2)如果没有发生 PID 杀戮,是否还有一种方法可以使脚本失败?

标签: bashshellgreppid

解决方案


推荐阅读