在開始學習系統編程的時候,學習了fork的使用,記錄下來以供自己以後的學習
fork函數用於創建一個新的進程,
#include #include
#include
#include
int main(void)
{
pid_t pid;
char *message;
int n;
pid = fork();
if (pid < 0) {
perror("fork failed");
exit(1);
}
if (pid == 0) {
message = "This is the child\n";
n = 3;
} else {
message = "This is the parent\n";
n = 6;
}
for(; n > 0; n--) {
printf("%s",message);
sleep(1);
}
return 0;
}
程序運行結果:
返回值: 子進程返回 0,父進程返回子進程的id,若出錯,則返回-1;
fork函數調用一次但是返回兩次,兩次返回的唯一區別是子進程的返回值是0,而父進程返回值是新進程的進程ID號。將子進程ID返回給父進程的理由是:因為一個進程的子進程可以有多個,並且沒有一個函數使一個進程可以獲得其所有子進程的進程ID號。fork函數使子進程返回0的理由是:一個進程只會有一個父進程,所以子進程總是可以調用getppid以獲取其父進程的進程ID