On Thu, Aug 4, 2011 at 11:20 PM, Steven W. Orr <ste...@syslang.net> wrote: > 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
Thanks. There is another question, how do I change the nice level in bash script. I don't have root previlege, and I notice my nice level is 19 when run a .sh, but for normal operation, it's default 0. really thanks, > > > > > -- > 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 > > -- Best Regards, lina