我想知道你是否可以终止正在执行节点应用程序的线程而不是进程。
现在,我知道这听起来很奇怪,因为节点是单线程的,但我正在处理一个承载节点进程的.NET应用程序。当我用process.exit()
终止节点时,整个应用程序都会关闭,这是我不想要的行为。我只是想让节点线程终止。
老实说,我非常绝望,我甚至尝试过,在创建执行节点的线程之前获取所有应用程序线程的列表,然后在创建之后获取另一个列表,然后删除在启动节点之前存在的所有线程,保持对剩余线程的引用,认为它是节点线程。正如你所料,这并没有那么好。
我正在使用EdgeJS来托管节点,如果这有任何区别的话。遗憾的是,它没有内置功能来终止自身。
哦,server.close()
由于某些原因对我不起作用。
我正在我的节点代码中托管视频流服务器,如果该信息可以以任何方式为您提供帮助。
提前感谢您的所有帮助!
答案 0 :(得分:3)
节点线程需要通过清除事件循环上运行的所有内容来协作,然后通过返回自然终止。所以只需停止侦听请求,关闭句柄等。您可以使用process._getActiveRequests
和process._getActiveHandles
来查看保持事件循环活动的内容。
你也可以通过调用OS apis突然中断节点线程,但这会泄漏大量垃圾直到你退出进程,所以你无法启动/重启节点很多次,然后你需要退出进程才能免费泄露的资源。