bug-bash
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: how to enable thread


From: lina
Subject: Re: how to enable thread
Date: Thu, 4 Aug 2011 23:26:17 +0800

On Thu, Aug 4, 2011 at 11:20 PM, Steven W. Orr <steveo@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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]