终止父进程后,shell脚本不终止子进程

时间:2019-05-06 06:16:42

标签: shell jmeter

我有一个shell脚本(run.sh),它可以并行运行两个命令(jmeter脚本)。如果我终止shell脚本,它并不会杀死启动的并行进程,而是在后台运行。

如果在执行{的终端中按下 Ctrl + C ,我能否制作一个可以在Windows和Linux上运行的Shell脚本,并且终止所有进程。 {1}}?

run.sh

这是我的代码。

我尝试过:

#!/bin/sh

JmeterFolder=$1
$JmeterFolder/bin/jmeter.bat -n -t one.jmx -j oneLog.log & 
$JmeterFolder/bin/jmeter.bat -n -t two.jmx -j twoLog.log & 
wait

但是当我在Windows PowerShell中执行它时,它不起作用,并且认为这不是正确的方法。

1 个答案:

答案 0 :(得分:0)

编写一个无限循环来模拟您的jemter: subtask.sh

#!/bin/bash
while true
do
  date -R
  sleep 1
done

用于启动子任务并等待100秒以等待Ctrl-C的主脚本:

#!/bin/bash

trap 'kill $subpid; exit' SIGINT
./subtask.sh  &
subpid=$!
sleep 100

结果:

$ ./main.sh 
Mon, 06 May 2019 02:03:32 -0700
Mon, 06 May 2019 02:03:33 -0700
^C$ 

当我按Ctrl-C“ ^ C”时,它在打印两行后停止。

如果主外壳已结束,则子任务的父进程ID将变为1,因此它无法再将信号传递给后台进程。

我认为解决方法只能将子任务PID记录在文件中,并在要结束它们时杀死pid。