2012-01-24 29 views
1

我使用waitpid函數給出waitpid函數在C++中造成問題

waitpid函數(childPID,&狀態,WNOHANG);

這是在一個無限循環內的程序中使用,該程序在需要時分叉並且父級等待子進程返回。但最近我也碰到過,其中在程序上打印此向CERR後退出的問題..

waitpid函數:無子進程

這始終是從程序的最後一個日誌崩潰之前/退出。我知道它沒有segfault或任何東西,因爲我寫了一個回溯函數,它打印了程序訪問的最後10個地址。那麼這是否意味着程序在發現沒有子進程後退出循環?或者在這裏工作有什麼邪惡?

+4

你在檢查'waitpid'的返回值嗎?在我看來,它正在返回'ECHILD'。 – jweyrich

+0

但爲什麼程序退出? –

+1

只有你可以知道,我們不知道你的代碼在waitpid之前或之後做了什麼。 – Mat

回答

0

我想這裏發生的事情是fork系統調用失敗,因爲缺少進程表中的可用條目。你可以對fork的輸出做一個perror。我認爲它應該是RESOURCE_TEMPORARILY_UNAVAILABLE。