libuv - `uv_kill`和`uv_process_kill`有什么区别?

时间:2017-04-10 04:17:53

标签: c process libuv

  

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循环是否正在运行,停止或处于错误状态。

2 个答案:

答案 0 :(得分:1)

uv_process_killuv_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)

查看来源(herehere)。 uv_process_killuv_kill做同样的事情。