bash - 如何杀死并行 Bash 进程?
问题描述
我需要一种方法来杀死下面脚本中使用的所有进程。我删除了所有不必要的代码并使其尽可能简单,而不会破坏结构。
我为此创建了kill_other
函数,当被调用时(CTRL + C
按下后)应该会杀死所有东西。
现在,如果我终止脚本,functionOne
然后adb logcat
继续运行。
我怎么能杀了他们?
另外,由于我对这个trap
功能相当陌生,我不得不问我是否在代码中正确定位了它?
编辑:我在 Ubuntu 19.04 上运行这个脚本,如果有人需要信息,我的目标是 Android 手机。
#!/bin/sh
kill_other(){
## Insert code here to kill all other functions
exit
}
trap 'kill_other' SIGINT
main(){
functionOne &
adb logcat > log_test.log &
while true
do
echo "==================================================================="
memPrint
sleep 10
done
}
functionOne(){
while true
do
sleep 20
echo "==================================================================="
echo "Starting app 1"
echo "==================================================================="
functionTwo
sleep 20
echo "==================================================================="
echo "Starting app 2"
echo "==================================================================="
functionThree
done
}
functionTwo(){
adb shell monkey -p com.google.android.youtube -c android.intent.category.LAUNCHER 1
}
functionThree(){
adb shell monkey -p tv.twitch.android.app -c android.intent.category.LAUNCHER 1
}
memPrint(){
adb shell dumpsys meminfo | grep -A 10 "Total PSS by process\|Foreground\|Perceptible\|Total RAM\|Home"
}
## Start
main
解决方案
您可以尝试"ps -ef"
对“”的结果进行 grepping adb
,或者如果 bin 实际上是 adb,您可以尝试“ pkill adb
”。
或如我所见(Android ADB 停止应用程序命令,例如非 root 设备的“强制停止”)
adb shell ps
=> 将列出设备上所有正在运行的进程及其进程 ID
adb shell kill <PID>
=> 而不是使用您的应用程序的进程 ID
这是放置在 kill 函数中的选项,只是为了澄清
问候 !
推荐阅读
- python - 如何在cron中运行python脚本
- c# - 如何从 identityref 获取电子邮件
- postgresql - 在 Windows 10 家庭版中运行安装后步骤的 Postgres sql 警告问题?
- c++ - 如何从 cpp 程序运行 bonmin
- video.js - 如何使用 video.js 预加载 m3u8 的所有 .ts
- java - REST API 在带有 H2 数据库的 Spring Boot Maven 多模块项目中总是抛出 404 错误
- python - 来自 tkinter checkbotton 的 SQL 查询
- rust - Rust ffi 以跨平台方式包含动态库
- python - 如何在 selenium Firefox/Chrome 中使用 SOCKS5
- ajax - 如何在 Codeigniter 4 中记录每个 GET 和 POST 数据?