我有一个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中执行它时,它不起作用,并且认为这不是正确的方法。
答案 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。