节点杀死线程但不处理
Node kill thread but not process
我想知道您是否可以只终止节点应用程序正在执行的线程而不是进程。
现在,我知道这听起来很奇怪,因为节点是单线程的,但我正在处理托管进程中节点的 .NET 应用程序。当我用 process.exit()
终止节点时,整个应用程序都会关闭,这是我不想要的行为。我只想终止节点线程。
老实说,我非常绝望,我什至尝试过,在创建节点正在执行的线程之前获取所有应用程序线程的列表,然后在创建后获取另一个列表,然后删除之前存在的所有线程起始节点,保留对剩余线程的引用,认为它是节点线程。正如你所预料的那样,结果并不是那么好。
我正在使用 EdgeJS 来托管节点,如果这有什么不同的话。不幸的是,它没有内置的自我终止功能。
哦,而且 server.close()
出于某种原因对我不起作用。
我在我的节点代码中托管了一个视频流服务器,如果该信息对您有任何帮助的话。
提前感谢大家的帮助!
节点线程需要合作,清除事件循环中运行的所有内容,然后通过返回自然终止。因此,只需停止监听请求、关闭句柄等。您可以使用 process._getActiveRequests
和 process._getActiveHandles
来查看是什么让事件循环保持活动状态。
您也可以通过调用 OS api 突然中断节点线程,但这会泄漏大量垃圾,直到您退出进程,因此您不能 start/restart 在您之前多次节点无论如何都需要退出进程以释放泄漏的资源。
我想知道您是否可以只终止节点应用程序正在执行的线程而不是进程。
现在,我知道这听起来很奇怪,因为节点是单线程的,但我正在处理托管进程中节点的 .NET 应用程序。当我用 process.exit()
终止节点时,整个应用程序都会关闭,这是我不想要的行为。我只想终止节点线程。
老实说,我非常绝望,我什至尝试过,在创建节点正在执行的线程之前获取所有应用程序线程的列表,然后在创建后获取另一个列表,然后删除之前存在的所有线程起始节点,保留对剩余线程的引用,认为它是节点线程。正如你所预料的那样,结果并不是那么好。
我正在使用 EdgeJS 来托管节点,如果这有什么不同的话。不幸的是,它没有内置的自我终止功能。
哦,而且 server.close()
出于某种原因对我不起作用。
我在我的节点代码中托管了一个视频流服务器,如果该信息对您有任何帮助的话。
提前感谢大家的帮助!
节点线程需要合作,清除事件循环中运行的所有内容,然后通过返回自然终止。因此,只需停止监听请求、关闭句柄等。您可以使用 process._getActiveRequests
和 process._getActiveHandles
来查看是什么让事件循环保持活动状态。
您也可以通过调用 OS api 突然中断节点线程,但这会泄漏大量垃圾,直到您退出进程,因此您不能 start/restart 在您之前多次节点无论如何都需要退出进程以释放泄漏的资源。