I hope this isn't your homework or anything
extremely rough concept of what you've posted
main
Code:
#!/bin/bash
SUB_PROCESS_SCRIPT="./sub_process"
NUM_SUB_PROCESSES=5
function output_results
{
for ((i=0; i<${#SUB_PROCESS_ARRAY[*]}; i++)); do
echo "Child ${i}: $(cat ${SUB_PROCESS_ARRAY[$i]}.tmp)"
done
}
function kill_children
{
for ((i=0; i<${#SUB_PROCESS_ARRAY[*]}; i++)); do
echo "killing PID ${SUB_PROCESS_ARRAY[$i]}"
kill ${SUB_PROCESS_ARRAY[$i]}
done
}
function array_pop
{
if [ -n "$1" ]; then
NEW_ARRAY=( )
for ((i=0; i<${#SUB_PROCESS_ARRAY[*]}; i++)); do
if [ "$i" -ne "$1" ]; then
NEW_ARRAY[${#NEW_ARRAY[*]}]=${SUB_PROCESS_ARRAY[$i]}
fi
done
SUB_PROCESS_ARRAY=( )
for ((i=0; i<${#NEW_ARRAY[*]}; i++)); do
SUB_PROCESS_ARRAY[${#SUB_PROCESS_ARRAY[*]}]=${NEW_ARRAY[$i]}
done
fi
}
SUB_PROCESS_ARRAY=( )
for ((i=0; i<$NUM_SUB_PROCESSES; i++)); do
$SUB_PROCESS_SCRIPT &
SUB_PROCESS_ARRAY[${#SUB_PROCESS_ARRAY[*]}]=$!
done
INPUT=""
output_results
while [ "$INPUT" != "Q" ]; do
echo "----"
echo "Choose an action"
echo "T [Terminate a child process]"
echo "R [Refresh results]"
echo "Q [Quit]"
read INPUT
case $INPUT in
"T")
output_results
echo "Which child to terminate?"
read KILL_CHILD
echo "killing PID ${SUB_PROCESS_ARRAY[$KILL_CHILD]}"
kill ${SUB_PROCESS_ARRAY[$KILL_CHILD]}
echo "Delete PID tmp file? [y/n]"
read DEL_TMP
if [ "$DEL_TMP" == "y" ]; then
rm -f "${SUB_PROCESS_ARRAY[$KILL_CHILD]}.tmp"
fi
array_pop $KILL_CHILD
;;
"R")
output_results
;;
"Q")
;;
esac
done
kill_children
sub_process
Code:
#!/bin/bash
while [ true ]; do
echo "I am PID $$, and I've been running for $SECONDS seconds" > $$.tmp
sleep 10
done
Bookmarks