簡體   English   中英

fork exec wait的實現

[英]Implementation of fork exec wait

所以我試圖了解 fork exec 和等待的實現。 該程序應多次執行給定程序,每次使用不同的命令行 arguments。

第一個命令行參數是要重復執行的程序的名稱。

對於每個其他命令行參數,以該參數作為唯一參數運行程序。 在運行下一個子進程之前等待每個子進程完成。

所以理想情況下,如果我運行./main echo one two three.

它應該給我這樣的東西:

one 
two 
three

但出於某種原因,我只得到第一個參數。 我究竟做錯了什么? 謝謝

int main(int argc, char** argv){
 if (argc <2) {
    return 1;
}

for (int i = 2; i <argc; i++){
  if(!fork()) {
    argv[0] = "echo";
    argv[1] = argv[i];
    argv[2] = 0;
    
    execvp("echo",&argv[0]);

    wait(0);
   }
 }
}

您的代碼中存在多個問題。

這里最相關:

  1. 您正在覆蓋 argv[] 的內容,因此在第一個循環周期之后您將丟失輸入參數。 這就是為什么你只得到第一個參數

  2. execvp() function 不會返回,除非它失敗,所以你應該在execvp()之后處理一個可能的錯誤

  3. wait() function 在錯誤的地方; 它應該在子創建循環之外,在另一個檢查每個孩子結果的循環內

  4. wait() function 應該允許您讀取退出狀態值並了解相應的孩子發生了什么,如以下形式:

     int status, pid; pid = wait(&status);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM