亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
12下一頁
最近訪問板塊 發(fā)新帖
查看: 3631 | 回復(fù): 10
打印 上一主題 下一主題

請教等待多進(jìn)程退出的問題 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2008-06-16 14:01 |只看該作者 |倒序?yàn)g覽
請問如何等待所有子進(jìn)程退出后執(zhí)行輸出"run over"的操作?

代碼如下:

#include<stdlib.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/wait.h>

main(){

if ( fork() == 0 ) {
/* 子進(jìn)程程序 */
system("./test.pl > 1.log");
}
if ( fork() == 0 ) {
/* 子進(jìn)程程序 */
system("./test.pl > 2.log");
}
else {
/* 父進(jìn)程程序*/
printf("run over");
}
}

論壇徽章:
0
2 [報告]
發(fā)表于 2008-06-16 14:21 |只看該作者
原帖由 chancey 于 2008-6-16 14:01 發(fā)表
請問如何等待所有子進(jìn)程退出后執(zhí)行輸出"run over"的操作?

代碼如下:

#include
#include
#include
#include

main(){

if ( fork() == 0 ) {
/* 子進(jìn)程程序 */
system("./test.pl > 1.log");
...

wait

論壇徽章:
0
3 [報告]
發(fā)表于 2008-06-16 14:24 |只看該作者
謝謝 但是wait是當(dāng)任意一子進(jìn)程結(jié)束 就繼續(xù)執(zhí)行父進(jìn)程
我希望是所有的子進(jìn)程結(jié)束后再繼續(xù)父進(jìn)程 該如何寫呢?

論壇徽章:
0
4 [報告]
發(fā)表于 2008-06-16 14:27 |只看該作者
原帖由 cjaizss 于 2007-4-22 23:15 發(fā)表

while(wait(NULL) != -1 || errno != ECHILD);



借用一下

論壇徽章:
0
5 [報告]
發(fā)表于 2008-06-16 14:34 |只看該作者
原帖由 5毛黨黨員 于 2008-6-16 14:27 發(fā)表



借用一下


加上這個后的運(yùn)行結(jié)果是 執(zhí)行了兩次輸出"run over"

我只要執(zhí)行一次怎么做呢?

論壇徽章:
0
6 [報告]
發(fā)表于 2008-06-16 14:39 |只看該作者
while(wait(NULL) != -1 || errno != ECHILD);
printf("run over");

這樣只會打一次吧。。。

注意printf是不在while循環(huán)里的

[ 本帖最后由 5毛黨黨員 于 2008-6-16 15:13 編輯 ]

論壇徽章:
0
7 [報告]
發(fā)表于 2008-06-16 15:24 |只看該作者
原帖由 5毛黨黨員 于 2008-6-16 14:39 發(fā)表
while(wait(NULL) != -1 || errno != ECHILD);
printf("run over");

這樣只會打一次吧。。。

注意printf是不在while循環(huán)里的



恩 沒有在while循環(huán)里 確實(shí)是兩次 你試試~

論壇徽章:
0
8 [報告]
發(fā)表于 2008-06-16 15:35 |只看該作者
main(){

if ( fork() == 0 ) {
/* 子進(jìn)程程序 */
system("./test.pl > 1.log");
}
else if ( fork() == 0 ) {
/* 子進(jìn)程程序 */
system("./test.pl > 2.log");
}
else {
/* 父進(jìn)程程序*/
printf("run over");
}
}

第二個if前面要加else 要不然第一次fork的子進(jìn)程也會打印run over;

論壇徽章:
0
9 [報告]
發(fā)表于 2008-06-16 16:19 |只看該作者
原帖由 5毛黨黨員 于 2008-6-16 15:35 發(fā)表
main(){

if ( fork() == 0 ) {
/* 子進(jìn)程程序 */
system("./test.pl > 1.log");
}
else if ( fork() == 0 ) {
/* 子進(jìn)程程序 */
system("./test.pl > 2.log");
}
else {
/* 父進(jìn)程程序*/
printf(" ...



非常感謝~問題解決了
不過我想請教一下 為什么不加else會打印兩個“run over”呢

論壇徽章:
0
10 [報告]
發(fā)表于 2008-06-16 16:29 |只看該作者
if(fork()==0)
{
     A();
}
else
{
     B();
}

C();

估計你是沒有理解fork的含義,fork是創(chuàng)建一個子進(jìn)程,并把上面整個的代碼復(fù)制給子進(jìn)程。
但是因?yàn),父進(jìn)程中fork的返回值是子進(jìn)程的pid(pid!=0),所以執(zhí)行的B();C(); 。
而子進(jìn)程中fork的返回值是0,所以執(zhí)行A();C();
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP