首页 > 解决方案 > Mac bash 并行运行命令,其中一个进程不退出

问题描述

我正在尝试找到一种方法来从 Mac 终端中的一个命令并行运行两个进程,其中一个命令不会退出。本质上,我想运行以下命令来自动观察业力测试:

npm karma start --no-single-run --auto-watch

我还想打开浏览器到 karma 调试运行器页面:

http://localhost:9876/debug.html

我想在启动karma start上面的命令后大约 15 秒打开浏览器。我无法弄清楚如何在单行中并行执行此操作。

经过大约两个小时的搜索,到目前为止,这是我想出的:

npx karma start --no-single-run --auto-watch & ( sleep 15 && open http://localhost:9876/debug.html )

这按我想要的方式工作,除了 karma 似乎在单独的上下文中运行 - 这意味着用户不能Ctrl+C杀死节点进程,他们必须手动执行。

标签: bashmacos

解决方案


您可以在后台运行 npm 命令并在用户按下 Ctrl+C 时进行清理:

#!/usr/bin/env bash

# Initialize variables
wait_sec=15
browser_url="http://localhost:9876/debug.html"
npm_pid=""

function start_npm_command() {

  npm karma start --no-single-run --auto-watch &
  npm_pid=$!

}

function open_browser() {

  echo "Opening browser after waiting for ${wait_sec} seconds"
  sleep "${wait_sec}"
  open "${browser_url}"
  echo -e "\n\n Press 'Ctrl+C' to exit"

}

function handle_exit() {

  echo "Execute cleanup.."
  if [[ -n "${npm_pid}" ]]; then
    echo "Killing npm pid"
    kill -s SIGKILL "${npm_pid}"
  else
    echo "Do nothing"
  fi

}

function main() {

  start_npm_command
  open_browser

}

trap handle_exit SIGHUP SIGINT SIGQUIT SIGABRT SIGTERM
main


推荐阅读