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)
這樣你應該能比較清晰理解父子進程的關系。
希望能幫到你!