[理工] [OS]-fork()

看板Grad-ProbAsk作者 (小澤)時間14年前 (2010/03/05 00:30), 編輯推噓4(4022)
留言26則, 4人參與, 最新討論串1/1
int global=10 int main(){ int local=10 pid_t pid = fork(); if(pid == 0){ //1 local += 10; global+= 10; } else if(pid >0){ //2 wait(NULL); printf("global=%d",global); printf("local=%d",local); } printf("這行child process會執行嗎?") //3 } global = 10?? local = 20?? 另外,如果child執行了exec(),答案還會一樣嗎?? 這邊一直搞不懂,child執行完exec()後,區域/全域變數還是共用嗎? 且執行完後//2跟3是不是會交錯執行?? -- ◤ ◥◤ ◥◤ ◥◤ ◥ Σ ◆ ◆ Σ ◆ ◆ Σ ◆ ◆ Σ ◆ ◆ ++++++ ++++++ ++++++++++++◥▇▆@ @▆▇◤ Ψ Ψ ▄▄▄ ▄▄▄ / \ ΓVISS -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.116.14.2

03/05 00:47, , 1F
child肯定會執行3
03/05 00:47, 1F

03/05 00:51, , 2F
不管是全域還是區域都會共享 除非程式特別註明
03/05 00:51, 2F

03/05 00:52, , 3F
好像說反了QQ
03/05 00:52, 3F

03/05 00:54, , 4F
我寫程式測試,值都不會變~~不知道為什麼??
03/05 00:54, 4F

03/05 00:55, , 5F
因為是fork出新的process , 不是 thread
03/05 00:55, 5F

03/05 00:55, , 6F
印出來是 //3 10 10 //3
03/05 00:55, 6F

03/05 00:55, , 7F
樓上,因為實際程式還是沒有共享...要用open file等
03/05 00:55, 7F

03/05 00:55, , 8F
所以除了code section 其他都是獨立的
03/05 00:55, 8F

03/05 00:55, , 9F
data是各自獨立 所以local=global=10
03/05 00:55, 9F

03/05 00:56, , 10F
所以只要看到fork跟變數有關,都不會變嗎??
03/05 00:56, 10F

03/05 00:56, , 11F
那有無執行exec()有什麼差別?
03/05 00:56, 11F

03/05 00:57, , 12F
寫考卷要把global當global...(因為老師說的算)
03/05 00:57, 12F

03/05 00:58, , 13F
話說18300沒人會嗎 幫我解答一下= =
03/05 00:58, 13F

03/05 00:59, , 14F
看到差別了執行完exec(),子P直接跳出,不會執行//2跟3
03/05 00:59, 14F

03/05 01:00, , 15F
global當global什麼意思??
03/05 01:00, 15F

03/05 01:01, , 16F
恩...因為實際上真的要共享有點麻煩,所以通常題目會
03/05 01:01, 16F

03/05 01:01, , 17F
在宣告的時候直接說它是共享的 大概是這樣的意思
03/05 01:01, 17F

03/05 01:03, , 18F
所以只要宣告成global,在考試時都要共享??
03/05 01:03, 18F

03/05 01:04, , 19F
我認為是這樣,有誤請糾正。這題...倒底是這個變數是
03/05 01:04, 19F

03/05 01:04, , 20F
如果是共享的...應該會出用pthread之類的吧?
03/05 01:04, 20F

03/05 01:05, , 21F
global,還是這個變數名稱叫global,只是一般變數
03/05 01:05, 21F

03/05 01:05, , 22F
都是
03/05 01:05, 22F

03/05 01:08, , 23F
都是阿~我宣告在外面~~為了方便辨認~宣告成global
03/05 01:08, 23F

03/05 01:08, , 24F
還有我發現子Process加完值,如果再//3作變數輸出~值會變
03/05 01:08, 24F

03/05 01:11, , 25F
完全懂了~~寫程式還是最好了解~~
03/05 01:11, 25F

03/05 01:11, , 26F
不過太久沒用linux都忘了怎麼編譯
03/05 01:11, 26F
文章代碼(AID): #1BZ-0fb7 (Grad-ProbAsk)