基於

2014-01-30 43 views
0

我最裏面有我的所有命令 喜歡這個基於

L4.ksh # topmost wrapper 
    L3.ksh 
     L2.ksh 
      Nohup command > log 2>&1& # label that c1 
      Nohup command > log 2>&1& # c2 
      wait      # w1 
      Nohup command > log 2>&1& # c3 


     L2_1.ksh 
      Nohup command > log 2>&1& # label that c4 
      Nohup command > log 2>&1& # c5 
      wait      # w2 
      Nohup command > log 2>&1& # c6 

什麼,我想要做的包裝內運行的包裝條件傳遞返回碼父shell是C6,C3的捕獲退出狀態。當然我會堅持rc = $?在它下面。剛剛做到了。 接下來我希望當所有的命令L2在那個時間過後看看C3的狀態,它是L2中的最後一個nohup,並且L2的退出代碼應該是C3在L2中的所有事件完成後的狀態。注意這些C1 C2等都是並行運行的。 當L2完成時,我將僅在L2完成完成後才執行L2_1,也就是完成所有進程(因此C3可能已完成,並且C1 C2仍在運行中,但所有C應完成的都是要求條件) 最後,如果L2和L2_1的狀態碼均爲0,則L3應返回0,否則l3應返回非零狀態碼。

如果我把捕獲$?在L2系列(C3和C6),然後把等待,然後退出$ RC

  C3 
      rc=$? 
      wait 
      exit $rc 

的L2和L2_1兩個,然後L3-的狀態代碼將服務於目的做了有條件開關的最後一個命令?或如何做到最好 ty sam

感謝Dogbane爲您的回覆捕獲個人PID的答覆。問題是我不知道有多少炮彈被擊中。 L2.ksh是一個運行時生成的shell,其中包含命令 ,所以問題是如何收集所有的PID。我必須啓動一些計數器?跟蹤。 當所有後臺任務在shell中完成其工作並且然後標記最後一個後臺任務的退出狀態時,找不到狀態的更好方法嗎?

回答

1

我建議你捕捉的PID,等待他們,如下圖所示:

L2.ksh 
    nohup command > log 2>&1& # label that c1 
    c1_pid=$! 

    nohup command > log 2>&1& # c2 
    c2_pid=$! 

    nohup command > log 2>&1& # c3 
    c3_pid=$! 

    # wait for c1 and c2 to finish. 
    wait $c1_pid $c2_pid 

    # wait for c3 to finish 
    wait $c3_pid 
    exit $? 
+0

您好感謝您的答覆。我更新了一個關於該問題的提問,而不是將它放在評論中,但它並不突出,而且很難閱讀。 – user1874594