Here is the script: #!/bin/bash # multiple-processes.sh: Run multiple processes on an SMP box.
# Script written by Vernia Damiano. # Used with permission. # Must call script with at least one integer parameter #+ (number of concurrent processes). # All other parameters are passed through to the processes started. INDICE=8 # Total number of process to start TEMPO=5 # Maximum sleep time per process E_BADARGS=65 # No arg(s) passed to script. if [ $# -eq 0 ] # Check for at least one argument passed to script. then echo "Usage: `basename $0` number_of_processes [passed params]" exit $E_BADARGS fi NUMPROC=$1 # Number of concurrent process shift PARAMETRI=( "$@" ) # Parameters of each process function avvia() { local temp local index temp=$RANDOM index=$1 shift let "temp %= $TEMPO" let "temp += 1" echo "Starting $index Time:$temp" "$@" sleep ${temp} echo "Ending $index" kill -s SIGRTMIN $$ } function parti() { if [ $INDICE -gt 0 ] ; then avvia $INDICE "[EMAIL PROTECTED]" & let "INDICE--" else trap : SIGRTMIN fi } trap parti SIGRTMIN while [ "$NUMPROC" -gt 0 ]; do parti; let "NUMPROC--" done wait trap - SIGRTMIN exit $? : <<SCRIPT_AUTHOR_COMMENTS I had the need to run a program, with specified options, on a number of different files, using a SMP machine. So I thought [I'd] keep running a specified number of processes and start a new one each time . . . one of these terminates. The "wait" instruction does not help, since it waits for a given process or *all* process started in background. So I wrote [this] bash script that can do the job, using the "trap" instruction. --Vernia Damiano SCRIPT_AUTHOR_COMMENTS On 6/26/05, Sammo <[EMAIL PROTECTED]> wrote: > 2.05b.0(1)-release > > I seem to be having problems with one of the examples in the Advanced > Bash Scripting Guide [1]. The script is supposed to start a specified > number of processes, and when each process finishes, it sends a trap > signal, which starts a new process. I think the script is correct, but > it's not working as expected. > > This is what is happening: The first process that finishes sends a > trap signal to $$, and a new process is started (as expected). But > when subsequent processes try to send the trap signal, they can't find > the process. Also, seems that the "wait" command is only waiting until > the first process finishes, instead of waiting for all of them to > finish. > > Well, here is the output: > > $ ./multiple-processes.sh 3 > Starting 8 Time:3 > Starting 7 Time:1 > Starting 6 Time:4 > Ending 7 > Starting 5 Time:4 > > $ Ending 8 > ./multiple-processes.sh: line 37: kill: (3944) - No such process > Ending 6 > ./multiple-processes.sh: line 37: kill: (3944) - No such process > Ending 5 > ./multiple-processes.sh: line 37: kill: (3944) - No such process > > Please, can somebody help?! > > References: > > [1] Example 29-8. Running multiple processes (on an SMP box), > http://www.tldp.org/LDP/abs/html/debugging.html#MULTIPLEPROC > _______________________________________________ Bug-bash mailing list Bug-bash@gnu.org http://lists.gnu.org/mailman/listinfo/bug-bash