在 shell 脚本中杀死后台进程

sol*_*_oi 5 shell process busybox

我有一个启动后台进程的脚本。

#!/bin/sh

./process1.sh &
./process2.sh &
Run Code Online (Sandbox Code Playgroud)

我需要使用单独的脚本终止这些进程。这是我所做的:

#!/bin/sh
# the kill.sh

pid=$(ps | grep './process1.sh' |grep -v grep| awk '{print $1}')
kill -9 $pid
Run Code Online (Sandbox Code Playgroud)

提问时间:

  1. 当调用 kill.sh 时,进程停止。但我收到消息

    “sh:你需要指定杀死谁”。这是为什么?

  2. 在我使用描述的脚本终止进程后,它不会立即停止。有一段时间我在屏幕上看到输出,好像进程仍在运行一样。为什么?

  3. 杀死进程的替代解决方案是什么?

值得一提的是,我正在使用busybox,我对实用程序的选择有限。

man*_*ana 5

您可以将进程 ID 存储在一个临时文件中,如下所示:

#!/bin/sh

./process1.sh &
echo $! > /tmp/process1.pid
./process2.sh &
echo $! > /tmp/process2.pid
Run Code Online (Sandbox Code Playgroud)

然后用你的脚本删除它。$!返回上次执行的进程的PID。

kill -9 `cat /tmp/process*.pid`
rm /tmp/process*.pid
Run Code Online (Sandbox Code Playgroud)

确保在process*.pid相应的脚本完成后文件被删除。