我有一个要运行的服务器(在一个 HTTP 端口上),然后是另一个脚本((暂时)在另一个端口上运行)。
我使用管道来让它们同时运行,并使用方括号对命令进行分组,以便首先进行睡眠(第二个脚本访问第一个脚本中启动的服务器,因此需要一些时间来设置第一个脚本)向上)。
它工作正常,服务器启动,睡眠和测试文件随后正确执行,但终端进程在测试后不会像刚刚运行脚本时那样自动退出。
npm run start-json-server | { sleep 1; node './test/index-cjs.js' ; }
我需要做什么才能允许自然退出(最好不要经历找到进程并杀死它的麻烦)?
更新:我意识到它仍在运行(废话),因为第一个脚本作为服务器,不会终止...但是有没有办法让我再次终止它,最好是在不找到其 PID 的情况下?
答案1
管道不用于启动并发进程。它确实可以做到这一点,但它主要用于在管道的两个阶段之间设置数据流。
而不是你的管道,使用
npm run start-json-server &
server_pid="$!"
sleep 1
node ./test/index-cjs.js
kill "$server_pid"
这将在后台启动第一个命令。然后在第二个命令启动之前会有一秒钟的延迟。当第二个命令完成时,第一个命令将被终止。
最近启动的后台进程(通过&
在其末尾使用 启动的进程)的 PID 可用"$!"
,这里我们使用该事实来跟踪第一个命令的 PID。