[英]fork 3 child processes for 3 functions
我想派生3個子進程,並讓每個進程執行一個功能,並忙於等待它們完成。 第三個進程是一個倒數計時器,因此一旦運行時間達到0,我將使用IPC告訴其他進程退出。 我已經編寫了IPC部分之外的函數,它們分別運行,但是我無法讓fork()創建3個子進程來分別執行特定功能。
int main(int argc, char *argv[]) {
pid_t child_onepid, child_twopid, child_threepid, pid;
for (i = 0; i < 3; ++i) {
pid = fork();
if (pid) {
continue;
} else if (pid == 0 && i == 0) {
show_time();
} else if (pid == 0 && i == 1) {
show_uptime();
} else if (pid == 0 && i == 2) {
show_timer(runtime);
} else {
printf("fork error\n");
exit(1);
}
}
return EXIT_SUCCESS;
}
這是我的輸出
Time: 06/28/2014 18:55:57PM
Timer: 00:09
>Timer: 00:09
6:55pm up 171 day(s), 10:49, 17 users, load average: 0.34, 0.38, 0.43
6:55pm up 171 day(s), 10:49, 17 users, load average: 0.34, 0.38, 0.43
您的代碼對我來說看起來不錯,但您的錯誤測試將永遠不會發生,因為if(pid)
將在-1
觸發。
除此之外,您是否可以確保您的函數不會返回,然后再遍歷自己的for循環副本,這將解釋輸出內容,所以我添加了一些break
來確保這一點。
但是我還沒有測試代碼。
int main(int argc, char *argv[]) {
pid_t pid;
for (int i = 0; i < 3; ++i) {
pid = fork();
if (pid == -1) {
perror("fork error\n");
exit(EXIT_FAILURE);
} else if (pid > 0)
continue;
} else if (i == 0) {
show_time();
break;
} else if (i == 1) {
show_uptime();
break;
} else if (i == 2) {
show_timer(runtime);
break;
}
}
return EXIT_SUCCESS;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.