2014-01-30 1 views
0

у меня есть раковина, как этотожидания для всех дочерних процессов в фоновом режиме, чтобы завершить и выйти с кодом возврата процесса в прошлом ребенка

middle.ksh <parameter> 
    inner1.ksh <para> > Log 2>&1 & 
    p1=$! 

    inner2.ksh <para> > log 2>&1 & 
    p2=$! 
    inner3.ksh <para> > log 2>&1 & 
    p2=$! 
    sleep nnn 
     inner4.ksh <para> > log 2>&1 & /# L1last process fired 
    p2=$! 
    rc=$? /# I am checking the rc for the last process 
    wait 

Я хотел бы сделать что-то вроде этого --find, если ВСЕ процессы, выполненные в фоновом режиме, завершены. - Когда все закончилось, мне бы хотелось, чтобы middle.ksh завершил работу с кодом возврата последнего дочернего процесса - viz inner4.ksh, указанным выше. Другими словами, я хочу сказать, что middle.ksh побежал нормально, если все процессы, которые он запускал внутри, преуспели (внутренний 1..4) & & inner4.ksh удалось. Если файл inner4.ksh не удался - средний.ksh потерпел неудачу. Теперь я могу собрать каждый PID и сказать wait p1 p2 p3 etc Проблема в том, что все эти дочерние оболочки написаны динамически в обертке (middle.ksh), поэтому я не знаю, сколько inner.ksh там может быть 10-может быть 100 Can это делается легко - или я что-то упускаю. ти

ответ

1

Это немного запутанным, но ...

{ 
    inner1.ksh ... & 
    inner2.ksh ... & 
    # and all the rest but one of the inner*.ksh jobs 
    wait 
} & 
all_but_one_pid=$! 
innerN.ksh ... & 
last_pid=$! 
wait $all_but_one_pid 
wait $last_pid 

middle.ksh имеет два процесса: один, который работает все, кроме одного из inner*.ksh рабочих мест параллельно и выходов, когда они все сделали, а второй который запускает последнюю работу inner*.ksh. Как только эти две работы будут завершены, вы просто нажмете wait, затем wait на второй. Если wait $last_pid - последняя команда в middle.ksh, вы можете просто выйти; статус выхода wait (который является статусом выхода одиночного inner*.ksh задания, которое он ожидает) будет иметь статус выхода middle.ksh. В противном случае просто поставьте rc=$? сразу после этого wait, чтобы сохранить возвращаемое значение позже, когда middle.ksh выходов.

 Смежные вопросы

  • Нет связанных вопросов^_^