为什么进程不退出以及如何让它退出

为什么进程不退出以及如何让它退出

我有一个要运行的服务器(在一个 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"

这将在后台启动第一个命令。然后在第二个命令启动之前会有一秒钟的延迟。当第二个命令完成时,第一个命令将被终止。

最近启动的后台进程(通过&在其末尾使用 启动的进程)的 PI​​D 可用"$!",这里我们使用该事实来跟踪第一个命令的 PID。

相关内容