2012-07-17 2 views
0

PID와 부모/자식 프로세스의 사용법에 대해서는 다소 혼란 스럽습니다. 나는 그들에 대해 읽고 있었다. 그리고 나는 프로그램이 시작될 때 그것이 그 자신 (아이)의 정확한 사본을 만들고 그들 각각이 유일한 PID를 가진다는 사실까지 이해한다. 그러나 쉘 프로그램에서 쉘 프로그램의 특정 측면이 완료되면 알려주기 위해 쉘에서 사용할 수 있을지 확신 할 수 없습니다. 더 나은 예를 들어Bash : 쉘 스크립트에서 프로세스 ID 사용하기

(의사 코드) : 나는 어떤 주어진 값이 명령이 완료 될 때 특정 값의 다음에 이동할 수 있도록 볼 수 바라고

for ((i = 0; i < 10; i++)) 
    for a_name in "${anArray[@]}";do 
    a series of math equations that allow the values associated with a_name to run in the background simultaneously using '&' earlier in the code   
    done 
wait 

    for a_name in "${anArray[@]}";do 
    same as above but diff equations 
    done 
wait 
done 

루프 및 명령.

wait는 작업 식별자를 인수 (% 1 대기 또는 $ PPID 대기)로 취할 수 있음을 알았지 만 구현 방법을 잘 모르겠습니다.

PID를 사용하는 방법에 대한 조언이 있거나 슈퍼 튜토리얼에 대한 링크가있는 사람이 있습니까? (그리고 나는 수퍼 좋은, 나는 거기에 던져 일부 평신도의 조건이 필요) 의미

고마워!

+0

백그라운드에서 작업을 실행 하시겠습니까? – nikhil

+0

귀하의 필요에 혼란 스럽습니다. 루프가 완료를 기다리지 않도록 명시 적으로 지시하지 않으면 계속 진행하기 전에 각 명령이 완료 될 때까지 기다릴 것입니다 ... 본질적으로 찾고있는 것 –

+0

작업이 백그라운드에서 실행되기를 원합니다. 그리고 당신이 그것을 & 사용할 수 있다는 것을 압니다. 그러나 각 백그라운드 작업이 언제 완료되는지 어떻게 알 수 있습니까? 또한 작업이 완료되면 백그라운드 작업이 완료 될 때까지 기다리지 않도록 어떻게 할 수 있습니까? – Stephopolis

답변

1
당신은 하나의 프로세스에 대기 할 수

: 모든 아이들 기다릴 수

command ${array[0]} & 
waiton=$! 
# Do some more stuff which might finish before process $waiton 
wait $waiton 

가 처리합니다

someLongRunningCommand & 
(
    for value in "${array[@]}"; do 
     command "$value" & 
    done 
    wait 
) 
# wait with no arguments waits on all children processes of the current 
# process. That doesn't include `someLongRunningCommand`, as it is not 
# a child of the process running the subshell. 

다른 상황이 더 교묘하고 더 나은 xargs, parallel 또는 일부에 의해 처리 될 수 있습니다 다른 방법.

관련 문제