我不明白waitpid()函數。手冊上說:爲什麼waitpid(-1,&status,0)不暫停沒有任何孩子的進程?
The wait() system call suspends execution of the calling process until one of its children terminates. The call wait(&status) is equivalent to: waitpid(-1, &status, 0);
來源:http://manpages.ubuntu.com/manpages/raring/man2/wait.2.html
據我明白這一點:如果我有一個過程,沒有子進程什麼那麼並調用waitpid(-1, &status, 0)
功能,那麼這個過程應該掛在那裏,不要繼續下去,因爲如果沒有孩子,永遠不會有狀態變化,所以這個過程只是掛在那裏,等待子進程改變狀態,在這種情況下永遠不會發生,但這種理解似乎是錯誤的,因爲代碼下面不掛在waitpid()函數。相反,它返回-1錯誤,這似乎是合理的,因爲沒有任何子進程,但根據手冊我的理解程序應該掛在/在waitpid()函數並等待孩子改變狀態。然而,沒有孩子,所以沒有地位變化,所以它應該掛在waitpid()函數中並等待。下面的代碼不應該達到printf()語句,而是它會到達printf()函數。
此代碼只是爲了演示puposes:
#include <sys/wait.h>
#include <sys/types.h>
#include <stdio.h>
int main() {
int status;
pid_t pid;
pid = waitpid(-1, &status, 0);
printf("%i\n", (int) pid); // pid returns -1
return 0;
}
該程序執行,直到結束,但據我瞭解,根據手冊它不應該。我的上述推理有什麼問題?
沒有孩子,所以聲明不成立 - 因此不需要掛起。 –