首页 > 解决方案 > 如何杀死并行 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

标签: bashadb

解决方案


您可以尝试"ps -ef"对“”的结果进行 grepping adb,或者如果 bin 实际上是 adb,您可以尝试“ pkill adb”。

或如我所见(Android ADB 停止应用程序命令,例如非 root 设备的“强制停止”

adb shell ps=> 将列出设备上所有正在运行的进程及其进程 ID

adb shell kill <PID>=> 而不是使用您的应用程序的进程 ID

这是放置在 kill 函数中的选项,只是为了澄清

问候 !


推荐阅读