gpt4 book ai didi

node.js - Node : child_process. exec() 进程在父进程死亡后继续

转载 作者:搜寻专家 更新时间:2023-11-01 00:45:32 27 4
gpt4 key购买 nike

我正在尝试创建用于测试目的的本地 API 服务,这涉及在我的构建系统中运行 make 命令。代码如下所示:

(注意:这是在 coffeescript 中)

request = require "request"
child_process = require "child_process"
tsc = require "training_service_connector"

campaign = "happytest"
strategy = campaign
port_number = 54340
service_conf_filename = tsc.writeServiceConfig(strategy, port_number)
exec_callback = (error, stdout, stderr) ->
console.log ('stdout:\n' + stdout + '\nstderr:\n' + stderr + "\nerror:\n" + error)
child_process.exec ("CONFIG=#{service_conf_filename} make run_bidder_service_runner", exec_callback)

# some other stuff

现在,为了弄清楚如何让测试的其余部分在 API 启动后运行(呃异步),我一直在 REPL 中运行这段代码。 REPL 有问题,所以我必须经常使用 ctrl+Z 来杀死它。 kill掉进程后,子进程好像还在运行...

lsof -i :54340
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
python 52650 max 3u IPv4 20606263 0t0 TCP localhost:54340 (LISTEN)

现在,如果我尝试再次运行它,我会收到一条错误消息,指出该端口已被使用。为什么子进程不与父进程一起死亡?

最佳答案

不同的操作系统以不同的方式处理子进程。我通常像这样添加处理程序:

['SIGINT', 'SIGHUP', 'SIGTERM'].forEach(function(signal) {
process.addListener(signal, gracefulShutdown);
});

gracefulShutdown 应该执行诸如关闭套接字和退出进程之类的操作 (process.stop())

哦...我刚刚重读了你的问题。 ctrl-z 暂停一个进程,它不会杀死它。如果您使用fgbg,它会将进程带回前台/后台。要快速运行 REPL,请使用 ctrl-c 两次。

关于node.js - Node : child_process. exec() 进程在父进程死亡后继续,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19668584/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com