Reputation: 444
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.
Upvotes: 2
Views: 96
Reputation: 123460
You can use wait
without arguments to wait for all previous jobs to complete:
command1 &
command2 &
wait
command3
Upvotes: 2