iT邦幫忙

2024 iThome 鐵人賽

DAY 3
0
Software Development

十年後重讀作業系統恐龍本系列 第 3

ch3圖3.30-Line A 將輸出什麼?

  • 分享至 

  • xImage
  •  

使用UNIX fork(),Line A 將輸出什麼?

fork-question-1.c

/*
 * Solution to question 3.1
 * 
 * Answer is 5 as the child and parent processes
 * each have their own copy of value.
 */

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/wait.h> /* greggagne沒加,會有 warning: implicit declaration of function 'wait' */

int value = 5;

int main()
{
	pid_t pid; /* 定義一個變量 pid 用於存儲 fork() 函數的返回值 */

	pid = fork(); /* 調用 fork() 函數來創建一個新的子進程。fork() 返回兩次:在父進程中返回子進程的 PID,在子進程中返回 0。 */
	
	/* 如果 pid 等於 0,則表示當前進程是子進程。子進程將 value 的值增加 15,變為 20,然後結束 */
    if (pid == 0) { /* child process */
		value += 15;
		return 0;
	}
    /* 如果 pid 大於 0,則表示當前進程是父進程。父進程會調用 wait(NULL) 等待子進程結束,然後印出 value 的值 */
	else if (pid > 0) { /* parent process */
		wait(NULL);
		printf ("PARENT: value = %d\n",value); /* LINE A */
		return 0;
	}
}

在父進程中,value 的值仍然是 5,因為父進程和子進程各自擁有自己的 value 複製品。子進程對 value 的修改不會影響父進程的 value。

Terminal
編譯並執行

gcc -o fork-question-1 fork-question-1.c
./fork-question-1

結果:
https://ithelp.ithome.com.tw/upload/images/20240917/20168766WTG63XmB6S.png

參考:greggagne/OSC9e/ch3/fork-question-1.c


上一篇
ch2第一部份-產生核心模組
下一篇
ch3圖3.9-使用UNIX fork()系統呼叫產生獨立行程
系列文
十年後重讀作業系統恐龍本30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言