On 8/4/2011 9:51 AM, lina wrote:
Actually I got a bash script which contains several process (jobs)
The waiting time is so long, I mean, run one by one,
I can submit one by one separately I can see the cores were used 100%
one by one,
but it's better use some bash script so I can easily modify in large amounts.
How can I enable thread in bash script,
like the one they did in 'make' file. I tried to understand but it's so hard,
Thanks for any further suggestions,
There is no thread interface in bash. You can only create processes. But,
there are some tricks you can do to better leverage your resources. Here's an
example:
waitpids=()
for machine in $list_of_machine
do
{
lets do a bunch of stuff here on $machine
} &
waitpids+=( $! $machine )
done
# Now just wait for all the machines to finish what they were doing:
sleeptime=0
def_sleeptime=2
while (( ${#waitpids[@]} > 0 ))
do
sleep $sleeptime
for (( kk=0; kk < ${#waitpids[@]}; kk+=2 ))
do
sleeptime=$def_sleeptime
pid=${waitpids[kk]}
machine=${waitpids[kk+1]}
# Check each pid to see if it still exists
# If it doesn't, then harvest the exit status
# and remove it from the list of waitpids.
# Don't wait for a pid that's still alive or you just hang.
# kill returns 0 if it successfully delivered the signal.
# Signal 0 is a trick to see if a pid is there.
if ! kill -0 $pid 2> /dev/null
then
wait $pid
stat=$?
echo -n "=== $machine has finished "
if (( stat != 0 ))
then
if (( stat > 128 ))
then
echo -n "BUT TERMINATED BECAUSE OF SIGNAL $(( stat - 128 ))"
else
echo -n "BUT IT DIED WITH EXIT STATUS:$stat"
fi
fi
echo
sleeptime=0
unset waitpids[kk] waitpids[kk+1]
# Reset waitpids or else the old indexes will return a null value.
# The reassignment will actually shrink it.
waitpids=("${waitpids[@]}")
break
fi
done
#If any of the pids still exist, we continue to loop
done
--
Time flies like the wind. Fruit flies like a banana. Stranger things have .0.
happened but none stranger than this. Does your driver's license say Organ ..0
Donor?Black holes are where God divided by zero. Listen to me! We are all- 000
individuals! What if this weren't a hypothetical question?
steveo at syslang.net