int uv_process_kill(uv_process_t* handle, int signum)
将指定的信号发送到给定的进程句柄。查看uv_signal_t上的文档 - 用于信号支持的信号句柄,特别是在Windows上。
int uv_kill(int pid, int signum)
将指定信号发送到给定PID。查看uv_signal_t上的文档 - 用于信号支持的信号句柄,特别是在Windows上。
这两种方式完全相同吗,或者库内部的机制有何不同?我需要处理错误情况,我的UV循环可能无法运行(无论出于何种原因),但我已经为我想要产生的所有进程调用了uv_spawn
。
我的目标是清理分配给子进程的资源,而无需知道uv循环是否正在运行,停止或处于错误状态。
答案 0 :(得分:1)
uv_process_kill
和uv_kill
执行相同的操作,但由于它们的界面,它们彼此不同。前者接受uv_process_t
句柄,而后者需要显式 pid (两者都有第二个参数,即信号编号)。
值得注意的是,结构uv_process_t
(可以与uv_process_kill
一起使用)具有名为pid
的字段(可以与uv_kill
一起使用),因此可以认为这两个功能是多余的
无论如何,要被杀死的进程的 pid 可能会因为外部源而出现(例如,用户可以通过命令行提供它 - 想想 kill <的方式/ em>工具适用于Linux)。因此,无论何时只要有 pid ,都无法保证有uv_process_t
的实例,并且不言而喻,这两个函数的用途略有不同。
当然,当您拥有uv_kill
的实例时,您仍然可以使用uv_process_t
:
uv_kill(proc.pid);
无论如何,这不是libuv的工作方式,你应该使用接受uv_*
数据结构的函数,因为他们知道如何正确地拆除所有内容。
总而言之,你可以在uv_process_kill
认为当你负责整个过程的整个生命周期时,你会使用更多面向libuv的函数(你生成它并在必要时杀死它)。另一方面,uv_kill
是一个更通用的函数,当你想要处理你知道 pid 但你没有正确初始化的进程时使用它uv_process_t
。
答案 1 :(得分:0)