2017-04-10 17 views
1

int uv_process_kill(uv_process_t* handle, int signum)libuv - `uv_kill`和`uv_process_kill`有什麼區別?

發送指定信號,以給定的處理句柄。檢查uv_signal_t上的文檔 - 信號支持的信號手柄,特別是在Windows上。

int uv_kill(int pid, int signum)

發送指定信號,以給定的PID。檢查uv_signal_t上的文檔 - 信號支持的信號手柄,特別是在Windows上。

這兩種做法完全相同的東西,還是圖書館內的機制有點不同?我需要處理UV環路可能無法運行的錯誤情況(無論出於何種原因),但我已經爲所有希望產生的進程調用了uv_spawn

我的目標是清理分配給子進程的資源,而無需知道如果UV循環運行,停止或處於錯誤狀態。

回答

1

uv_process_killuv_kill執行相同的操作,但由於它們的接口它們彼此不同。前者接受一個uv_process_t手柄而後者需要一個PID明確地(兩者都具有這是一個信號數的第二個參數)。
值得注意的是,結構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

0

看看源(herehere)。 uv_process_killuv_kill做同樣的事情。

+0

刪除「有在類型uv_process_t成員uv_process_t.pid」,同時還提供了一個鏈接到源(你是指在你的答案),我會給你對號。 – Zak