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循环是在运行、停止还是处于错误状态。
发布于 2017-04-21 06:20:19
uv_process_kill和uv_kill执行相同的操作,但由于它们的接口而彼此不同。前者接受uv_process_t句柄,而后者则显式地要求pid (两者都有第二个参数,即信号号)。
值得注意的是,struct uv_process_t (您可以与uv_process_kill一起使用)有一个名为pid的字段(您可以在uv_kill中使用),因此可以说这两个函数是多余的。
无论如何,由于外部源(例如,用户可以通过命令行提供它--想想杀死工具在Linux上是如何工作的),将被杀死的进程的pid可能会到来。因此,无论何时有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的进程。
https://stackoverflow.com/questions/43314906
复制相似问题