shell - 在 shell 脚本中杀死后台进程

标签 shell process busybox

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

#!/bin/sh

./process1.sh &
./process2.sh &

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

#!/bin/sh
# the kill.sh

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

提问时间:

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

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

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

  3. 终止进程的替代解决方案是什么?

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

最佳答案

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

#!/bin/sh

./process1.sh &
echo $! > /tmp/process1.pid
./process2.sh &
echo $! > /tmp/process2.pid

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

kill -9 `cat /tmp/process*.pid`
rm /tmp/process*.pid

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

关于shell - 在 shell 脚本中杀死后台进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12815600/

相关文章:

c - 在子进程处于事件状态并运行时读取和写入

c - 使用 BusyBox 的嵌入式 Linux 设备上的守护程序可以用 C 语言或脚本编写

android - 为什么 nohup 仍然导致在 shell 脚本中运行的进程终止?

bash - shell 脚本 : die on any error

macos - 对逗号分隔的值列表进行排序

shell - 如何从/etc/passwd中提取最大的UID值?

c - 管道没有被子进程读取?

android - 运行 ADB 命令的 Bash 脚本不会遍历设备列表

Linux 内核 : Threading vs Process - task_struct vs thread_info

linux - 在基于 busybox 的嵌入式 linux 上编写脚本