#!/bin/bash max_session=5 my_wd=$(pwd) if [ -z $1 ] ; then my_session=1 else my_session=$(( $1 + 1 )) fi create_producer(){ if [ ! -p $my_wd/iofifo ] ; then mkfifo $my_wd/iofifo fi while read line ; do echo $line > $my_wd/iofifo ; done < liste & } init_session(){ # session initialisation w/ the processing server echo "$my_session : init_session" } process_line(){ # arg : $1 : line to process echo "my session processing : $1" } close_session(){ echo "[7m$my_session : close_session[0m" exit } fct_cleanup(){ if [ $my_session -ne 1 ]; then kill -s SIGUSR1 $PPID fi close_session } trap "fct_cleanup" SIGHUP SIGINT SIGQUIT SIGILL SIGABRT SIGFPE SIGUSR1 SIGUSR2 SIGPIPE SIGTERM read_iofifo(){ echo "Hello I'm Here" if [ -f $my_pwd/all_lines_processed ] ; then kill -s SIGUSR1 $PPID fi read line < iofifo if [ $line == 'Finish' ] ; then # Finish is the last file's line to process kill -s SIGUSR1 $$ else process_line $line fi } if [ $my_session == 1 ] ; then create_producer fi echo "Hello - my pid is $$" echo "my parent is $PPID" if [[ $my_session -lt $max_session ]] ; then $0 $my_session $my_duty_max $_duty_marker fi init_session while read myline ; do process_line $myline done < <(read_iofifo)