首页 > 解决方案 > 从 shell 脚本中杀死一组特定的进程

问题描述

我有一个运行另一个 java .jar 的 shell 脚本,它正在使用 chromedriver 运行一些自动化测试。有时它会在退出时打开 5 或 6 个 chrome 浏览器。*我目前正在解决这个问题,但我需要一个临时的快速解决方案

我需要一种方法来杀死这些进程而不影响不是由脚本启动的 chrome 窗口

我尝试了下面的,但它只是杀死了第一个进程

#!/bin/bash
while true
do

openchrome=$(pgrep chrome)

java -jar uploadv2.jar

pgrep chrome | grep -v $openchrome |xargs -r  kill

标签: linuxsh

解决方案


不确定这是否有效,但我认为这就是基于 Stephen P 的评论的样子。这假设 java 程序仅将 chrome 进程作为子进程生成,而没有其他进程。

#!/bin/bash

$openjava=""
while true
do 
    java -jar uploadv2.jar &
    $openjava="$openjava $!" # List of all java programs running
    # The $! gets the most recently spawned process id 

    for process in $openjava
    do 
        childProc="$childProc `pgrep -P $process`" #get chrome processes spawned by java
    done

    for tab in childProc 
    do
        kill $tab    #kill the child processes (chrome tabs) 
    done
done        

推荐阅读