如果我運行這個程序,我會有死去的進程嗎?我正在嘗試創建一個運行5進程並行的主程序,然後不會得到不可用的進程。麻煩主要是要確定這沒有發生。我不太確定我是否正確地做到這一點。我聽說最好的做法是通過讓你的進程「等待()」來處理已經「fork()」的許多子進程,以確保你沒有停止進程。不存在的進程,fork()
#include <time.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <stdlib.h>
void forkChildren(int nrofChildren, int *nr_of_children) {
pid_t pid;
int i;
for(i=0; i<5; i++) {
/* fork a child process */
pid = fork();
(*nr_of_children)++;
/* error occurred */
if (pid < 0) {
fprintf(stderr, "Fork failed\n");
exit(-1);
}
/* successful child */
else if (pid == 0) {
int sleeptime=1; //rand()%10;
printf("I am child: %d \nwith parent: %d \nin loop: %d \nand will sleep for: %d sec\n\n", getpid(), getppid(), i, sleeptime);
sleep(sleeptime);
printf("Ending of child: %d \nwith parent :%d in loop: %d\n\n", getpid(), getppid(), i);
}
/* parent process
else {
wait(NULL); Do I need this to make sure I dont get defunct processes???
} */
}
}
int main(int argc, char *argv[]) {
srand((unsigned int)time(NULL));
int nr_of_children=0;
if (argc < 2) {
/* if no argument run 5 childprocesses */
forkChildren(5, &nr_of_children);
} else {
forkChildren(atoi (argv[1]), &nr_of_children);
}
wait(NULL);
printf("End of %d, with %d nr of child-processes\n\n", getpid(), nr_of_children);
return 0;
}
*全部*過程在終止後變爲無效。如果你「等待」他們,他們會在很短的時間內成爲殭屍。如果你離開或從主隊返回,他們將在很短的時間內成爲殭屍,因爲他們將被等待他們的初始化人接受。 – 2013-03-23 13:51:15
爲什麼不使用返回值來將生成的孩子的數量傳遞給調用者,而不是使用具有指向結果的愚蠢的'* nr_of_children'指針的void()函數? – wildplasser 2013-03-23 13:54:16
@wildplasser啊哈,這是一個想法,我沒有想過,謝謝:-) – patriques 2013-03-23 13:56:38