Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- time=$1
- namedPipe=$2
- declare -A slovarProcesov # deklariranje tabele key=kanonicnaPot; value=pidi #kljuci dobimo: "${!slovarProcesov[@]}"
- declare -A pidKanPotSProg # kanonicna pot s programu
- declare -A kanPotSArgPid #key=kanonicnaPotSArg; value=pidi #vrednosti dobimo: "${slovarProcesov[@]}"
- declare -a tabelaPidov
- steviloPidov=0 #Stevilo pognanih pidov?
- zadnjiUkaz=""
- if [ ! -p "$namedPipe" ]; then
- mkfifo $namedPipe
- fi
- checkIfRunnign() {
- echo "checkIfRunnign***********************"
- tmp=$(echo $1 | cut -d":" -f3)
- if [ "${#tmp[@]}" -eq 1 ]; then
- for j in "${!slovarProcesov[@]}"; do
- echo "slovarProcesov: $j"
- if [ "$tmp" -eq "${slovarProcesov[$j]}" ]; then
- echo "RUNING: ${slovarProcesov[$j]}"
- echo "Run configuration already exists."
- echo "Run configuration already exists.">&2
- return 1
- #echo "value:" ${slovarProcesov[$i]}
- fi
- done
- fi
- return 0
- }
- runPids(){
- declare -a tmp
- stInstanc=$(echo $1 | cut -d":" -f2)
- procPidi=$(echo $1 | cut -d":" -f3)
- if ! checkIfRunnign $1; then
- return
- fi
- tmp=(${procPidi//,/ }) #tabela vseh pidov
- if [ "$stInstanc" -eq 1 ] && [ "${#tmp[@]}" -eq 1 ]; then #steviloInstanc==1 IN dolzina TMP tabele = 1
- tabelaPidov[$steviloPidov]=$tmp
- let "steviloPidov++"
- kanoPot=$(readlink /proc/$tmp/exe)
- jeVSlovarProcesov=false
- for i in "${!slovarProcesov[@]}"; do #kljuci dobimo: "${!slovarProcesov[@]}" DODAVAMO PIDE MED PRAVE kanPoti
- if [ "$kanoPot" == "$i" ]; then
- starPid=${slovarProcesov[$i]}
- slovarProcesov[$kanoPot]="$starPid $tmp"
- jeVSlovarProcesov=true
- break
- fi
- done
- if ! $jeVSlovarProcesov; then
- slovarProcesov[$kanoPot]=$tmp
- fi
- argument=$(ps -p $tmp -o cmd= | cut -d" " -f1 --complement) #se v drugo tabelo kanPotSArgPid
- for i in "${!kanPotSArgPid[@]}"; do #kljuci dobimo: "${!slovarProcesov[@]}" DODAVAMO PIDE MED PRAVE kanPoti
- if [ "$kanoPot $argument" == "$i" ]; then
- starPid=${kanPotSArgPid[$i]}
- kanPotSArgPid["$kanoPot $argument"]="$starPid $tmp"
- jeVSlovarProcesov=true
- break
- fi
- done
- if ! $jeVSlovarProcesov; then
- kanPotSArgPid["$kanoPot $argument"]=$tmp
- fi
- echo "PID S KANONICNO POTJO S ARGUMENTOM ************* ${kanPotSArgPid["$kanoPot $argument"]}"
- else #stInstanc vec kot 1 ALI tmp tabele vec kot 1
- for pidProcesa in "${tmp[@]}"; do
- tabelaPidov[$steviloPidov]=$tmp
- let "steviloPidov++"
- kanoPot=$(readlink /proc/$pidProcesa/exe)
- echo "READLINK ********** $kanoPot*****************"
- jeVSlovarProcesov=false
- for i in "${!slovarProcesov[@]}"; do #kljuci dobimo: "${!slovarProcesov[@]}"
- if [ "$kanoPot" == "$i" ]; then
- starPid=${slovarProcesov[$i]}
- slovarProcesov[$kanoPot]="$starPid $pidProcesa"
- jeVSlovarProcesov=true
- break
- fi
- done
- if ! $jeVSlovarProcesov; then
- slovarProcesov[$kanoPot]=$tmp
- fi
- done
- fi
- echo "SlovarProcesov: ${!slovarProcesov[@]}"
- echo "PIDIIIIIIII***************************** ${tabelaPidov[@]}"
- }
- checkMatchingPids () { #ce se ujemajo
- declare -a tmp #tabela temporary
- procPidi=$(echo $1 | cut -d":" -f3) #vsi pidi v proc ukazu
- if [ "${#procPidi}" -eq 0 ]; then #ce dolzina 0, pidov ni
- return 1 #false
- fi
- tmp=(${procPidi//,/ }) #v tabelo vse pide
- proces1=$(ps -p ${tmp[0]} -o command=) #prvi iz tabele je proces1
- for pidProcesa in "${tmp[@]}"; do #za vsak pid cez tabelo vseh pidov
- proces2=$(ps -p ${pidProcesa} -o command=)
- echo "checkMatchingPids: $proces1************$proces2"
- lenProces1=${#proces1} #dolzina procesa1
- if [ "${proces2:0:1}" == "/" ] && [ "${proces2: -($lenProces1)}" == "$proces1" ]; then #ce je enako na zacetku / in na koncu se ujemajo
- continue
- fi
- if [ "$proces1" != "$proces2" ]; then
- echo "CHECKING ERROR: $proces1************$proces2"
- echo "PID matching error: $procPidi" >&2
- return 1 #1 -> false
- fi
- done
- return 0 # 0 -> true
- }
- proc() {
- echo "PROC**********************************************************************************************************************************$1"
- procUkaz=$1
- if [ "${procUkaz:0:5}" != "proc:" ]; then #preveri ce NI proc enak PROC:
- return
- fi
- if ! checkMatchingPids $1; then #preveri ce se so pidi istih instanc..
- return
- fi
- zadnjiUkaz=$1
- runPids $1
- # l=${pgrep -P $$}
- # echo "POGNANI PROCESI: $l"
- }
- log () {
- echo "LOG***********************************************************************************************************************************$1"
- datum=$(date +%s%3N)
- echo "$date" > active.log
- for i in "${!kanPotSArgPid[@]}"; do
- echo "key : $i, value: ${kanPotSArgPid[$i]}"
- echo "$i" >> active.log
- echo "${kanPotSArgPid[$i]}" >> active.log
- done
- }
- logLast(){
- echo "logLast*******************************************************************************************************************************$1 $2"
- echo "zadnji ukazzzzz proc: $zadnjiUkaz"
- procPidi=$(echo $zadnjiUkaz | cut -d":" -f3)
- tmp=(${procPidi//,/ })
- kanoPot=$(readlink /proc/$tmp/exe)
- argument=$(ps -p $tmp -o cmd= | cut -d" " -f1 --complement)
- datum=$(date +%s%3N)
- echo "$date" > active.log
- echo "$kanoPot $argument" >> active.log
- echo "$tmp" >> active.log
- echo "$kanoPot $argument"
- echo "$tmp"
- }
- stop () {
- echo "STOP**********************************************************************************************************************************$1"
- }
- exiT () {
- echo "EXIT************************************************************************************************************************************$1"
- #pkill -TERM -P $$
- #kill -9 $$
- }
- while true; do
- if read ukaz; then
- if [ "$ukaz" == "exit" ]; then
- exiT $ukaz
- else
- if [ "$ukaz" == "log" ]; then
- log $ukaz
- else
- if [ "$ukaz" == "log last" ]; then
- logLast $ukaz
- else
- prviZnaki=${ukaz:0:4} #prve 4 crke ukaza
- if [ "$prviZnaki" == "proc" ]; then
- proc $ukaz
- else
- if [ "$prviZnaki" == "stop" ]; then
- stop $ukaz
- fi
- fi
- fi
- fi
- fi
- fi
- done < "$2"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement