看板 Grad-ProbAsk 關於我們 聯絡資訊
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
dendrobium:child肯定會執行3 03/05 00:47
lightergogo:不管是全域還是區域都會共享 除非程式特別註明 03/05 00:51
lightergogo:好像說反了QQ 03/05 00:52
polomoss:我寫程式測試,值都不會變~~不知道為什麼?? 03/05 00:54
dendrobium:因為是fork出新的process , 不是 thread 03/05 00:55
polomoss:印出來是 //3 10 10 //3 03/05 00:55
strangehead:樓上,因為實際程式還是沒有共享...要用open file等 03/05 00:55
dendrobium:所以除了code section 其他都是獨立的 03/05 00:55
lightergogo:data是各自獨立 所以local=global=10 03/05 00:55
polomoss:所以只要看到fork跟變數有關,都不會變嗎?? 03/05 00:56
polomoss:那有無執行exec()有什麼差別? 03/05 00:56
strangehead:寫考卷要把global當global...(因為老師說的算) 03/05 00:57
lightergogo:話說18300沒人會嗎 幫我解答一下= = 03/05 00:58
polomoss:看到差別了執行完exec(),子P直接跳出,不會執行//2跟3 03/05 00:59
polomoss:global當global什麼意思?? 03/05 01:00
strangehead:恩...因為實際上真的要共享有點麻煩,所以通常題目會 03/05 01:01
strangehead:在宣告的時候直接說它是共享的 大概是這樣的意思 03/05 01:01
polomoss:所以只要宣告成global,在考試時都要共享?? 03/05 01:03
strangehead:我認為是這樣,有誤請糾正。這題...倒底是這個變數是 03/05 01:04
dendrobium:如果是共享的...應該會出用pthread之類的吧? 03/05 01:04
strangehead:global,還是這個變數名稱叫global,只是一般變數 03/05 01:05
dendrobium:都是 03/05 01:05
polomoss:都是阿~我宣告在外面~~為了方便辨認~宣告成global 03/05 01:08
polomoss:還有我發現子Process加完值,如果再//3作變數輸出~值會變 03/05 01:08
polomoss:完全懂了~~寫程式還是最好了解~~ 03/05 01:11
polomoss:不過太久沒用linux都忘了怎麼編譯 03/05 01:11