程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> 輸出-創建線程使用fork()

輸出-創建線程使用fork()

編輯:編程綜合問答
創建線程使用fork()

UNIX操作系統中,fork()系統調用用於創建進程。仔細閱讀、分析下列程序,假設程序正確運行並創建子進程成功,那麼,輸出到屏幕的正確結果是main()
{
pid_t pid;
pid = fork();
if (pid = = 0) printf ("Hello World\n");
else if (pid > 0) printf ("Hello World\n");
else printf ("Hello World\n");
}

最佳回答:


我不太理解你為什麼說用fork()創建線程。
我覺得,你不應該把父子進程輸出都統一
這樣,就像樓上所說的全是hello world
這樣不便於分析。

看看如下代碼:

 #include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>

#define err_exit(msg) (perror(msg),(exit(1)))

int main(void)
{
    pid_t pid;

    pid=fork();

    if(pid==0){
        puts("I am child ..");
    }else if(pid>0){
        puts("I am parent ..");
    }else{
        err_exit("fork()");
    }   
    return 0;
        }
        ```
    結果如下:

I am parent ..
I am child ..

這樣似乎還是沒有分析出他們具有父子關系。
所以再修改代碼:

#include
#include
#include
#include

#define err_exit(msg) (perror(msg),(exit(1)))

int main(void)
{
pid_t pid;

pid=fork();

if(pid==0){
    puts("I am child ..");
    printf("My father pid==%d\n",getppid());
    sleep(30);
}else if(pid>0){
    puts("I am parent ..");
    printf("My child pid==%d\n",pid);
    wait();
}else{
    err_exit("fork()");
}
return 0;

}

得到結果如下:

I am parent ..
My child pid==3926
I am child ..
My father pid==3925

在程序睡眠期間。我們調用系統工具

pstree -p |grep t27

查到如下結果:

|-gnome-terminal(3503)-+-bash(3511)---t27(3925)---t27(3926)


這樣你應該能比較清晰理解父子進程的關系。
希望能幫到你!
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved