在多進程中需要創建一個任務進程進行待處理任務的分發工作。也就是說,需要在主進程中detach剝離出一個進程,且該子進程獨立于主進程,進行獨立的任務發送。如果是單純在主進程中fork一個子進程的話,如果進行了wait等待操作,那么該任務進程就失去了獨立性,無法實現邊取任務邊分發任務。而如果是不進行wait等待操作的話,那么子進程可能也會執行后續創建多個處理任務的進程,使得出現的并行進程數量為預期的double。當然這也是可以通過在并發多進程wait之前對任務分配進程進行wait操作來達到預期要求。本文采取兩種方式來實現任務分配進程和任務處理進程的共存。
雙fork方式,以孫進程作為detach主進程的任務分配進程,由于該進程是游離于主進程的,所以其回收是通過系統實現的。
如果采用主進程直接fork一個子進程作為任務分配進程的話,該任務分配子進程也會執行后期的任務處理進程的多進程創建,使得并行的進程數是預期的double。 且由于主進程的等待操作并沒有考慮到這多出來的一倍進程,導致這部分進程沒有退出,僵死狀態。同時,任務分配進程也沒有退出。所以此時通過ps命令查看,發現進程數為7(=5并行進程+2(任務分配進程和主進程)) 并行執行過程輸出界面信息: ps查看進程情況: 可以查看對應的進程號是與上面多出來的一倍進程相對應的。
通過主進程fork一個子進程作為任務分配進程。主進程創建多個并發的任務處理進程。且在主進程wait各個任務處理進程之前進行一次任務進程的wait操作,使得任務進程得以回收,再進程并發進程的wait操作。
新聞熱點
疑難解答