Domanda

I am trying to ensure that a command is run serially after parallel commands have been terminated.

command1 &
command2 &
command3

In the above example, command1 and command2 are launched in background at the same time, but command3 is run soon after. I know this is expected behaviour in Bash, but I was wondering if there was a way for command3 to be launched after command1 and command2 are terminated.

It is probably possible to do:

(command1; touch done1) &
(command2; touch done2) &
while [ ! -f done1 ] && [ ! -f done2 ]; do sleep 1000; done
command3

...but if a more elegant solution is available I will take it. The join needs to be passive as these commands are destined to be used in PBS queues. Any ideas? Thanks in advance.

È stato utile?

Soluzione

You can use wait without arguments to wait for all previous jobs to complete:

command1 &
command2 &
wait
command3
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top