各位網友 小弟不才 可以幫小弟解釋作業系統行程呼叫

請大大們幫小弟詳細解說以下程式
int main()
{
pid_t pid;
/* fork another process */
pid = fork();
if (pid < 0) { /* error occurred */
fprintf(stderr, "Fork Failed");
exit(-1);
}
else if (pid == 0) { /* child process */
execlp("/bin/ls", "ls", NULL);
}
else { /* parent process */
/* parent will wait for the child to complete */
wait (NULL);
printf ("Child Complete");
exit(0);
}

各位網友 小弟不才 可以幫小弟解釋作業系統行程呼叫
2013-04-03 0:44 發佈
註解頗清楚的啊~
是哪裡不了解?

ps.恐龍本的範例嗎?
Linuxer - 不怨天 不尤人 的一群少數民族

AAGBE031 wrote:
請大大們幫小弟詳細解...(恕刪)
當你去了解每行code的意思後
就不會有這個問題

我個人都完全沒在理會什麼父行程子行程這種文字
只要自己知道每行code在做什麼事就好

小弟也不才
父行程跟子行程這我還是今天第一次聽到
原來就是 Process 嘛 ... 講這個我就知道是什麼了 XDDD

行程(英語:Process,中國大陸譯作進程)是電腦中已執行程式的實體。(擷取自維基百科)
簡化一下:

int main()
{
  pid_t pid;
  pid = fork();
  if(pid == 0){ /* child process */
    execlp("/bin/ls", "ls", NULL);
  }
  else{ /* parent process */
    /* do something */
    exit(0);
  }
}

程式執行到 fork() 時,fork() 會去複製現有的行程成為一個新行程
新行程和現有行程是一模一樣的,只有 PID 不同
fork() 將現有行程 PID 指定給現有行程的 pid 變數,而將 0 指定給新行程的 pid 變數
PID 都是正數,所以指定給現有行程的 pid 變數也是個正數

所以現有行程 (父行程) 跑 else 區塊
新行程 (子行程) 跑 if 區塊

// 以下為進階資料
上面講說 fork() 會去複製一個行程,那只是邏輯上
實際作業上 fork() 不會真的去複製,那很浪費時間和空間
行程是由靜態的指令碼和一個資料結構所組合而成的
這個資料結構記錄著行程的相關訊息,例如 PID、區域變數、堆疊、PSW、... 等
這個資料結構在行程生成時產生,消滅時消滅
fork() 只會去建立這個資料結構
而父子行程的靜態的指令碼則共用
謝謝各位大大 幫忙解答 小弟知道了 謝謝^^
AAGBE031 wrote:
謝謝各位大大 幫忙解...(恕刪)
期中考?
不是 小考
AAGBE031 wrote:
請大大們幫小弟詳細解...(恕刪)
內文搜尋
X
評分
評分
複製連結
Mobile01提醒您
您目前瀏覽的是行動版網頁
是否切換到電腦版網頁呢?