Advertisement
Guest User

Untitled

a guest
May 26th, 2016
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.22 KB | None | 0 0
  1. #!/bin/bash
  2. time=$1
  3. namedPipe=$2
  4. declare -A slovarProcesov # deklariranje tabele key=kanonicnaPot; value=pidi #kljuci dobimo: "${!slovarProcesov[@]}"
  5. declare -A pidKanPotSProg # kanonicna pot s programu
  6.  
  7. declare -A kanPotSArgPid #key=kanonicnaPotSArg; value=pidi #vrednosti dobimo: "${slovarProcesov[@]}"
  8.  
  9. declare -a tabelaPidov
  10. steviloPidov=0 #Stevilo pognanih pidov?
  11. zadnjiUkaz=""
  12.  
  13. if [ ! -p "$namedPipe" ]; then
  14. mkfifo $namedPipe
  15. fi
  16.  
  17. checkIfRunnign() {
  18. echo "checkIfRunnign***********************"
  19. tmp=$(echo $1 | cut -d":" -f3)
  20. if [ "${#tmp[@]}" -eq 1 ]; then
  21. for j in "${!slovarProcesov[@]}"; do
  22. echo "slovarProcesov: $j"
  23. if [ "$tmp" -eq "${slovarProcesov[$j]}" ]; then
  24. echo "RUNING: ${slovarProcesov[$j]}"
  25. echo "Run configuration already exists."
  26. echo "Run configuration already exists.">&2
  27. return 1
  28. #echo "value:" ${slovarProcesov[$i]}
  29. fi
  30. done
  31. fi
  32. return 0
  33.  
  34. }
  35.  
  36. runPids(){
  37. declare -a tmp
  38. stInstanc=$(echo $1 | cut -d":" -f2)
  39. procPidi=$(echo $1 | cut -d":" -f3)
  40.  
  41. if ! checkIfRunnign $1; then
  42. return
  43. fi
  44.  
  45. tmp=(${procPidi//,/ }) #tabela vseh pidov
  46. if [ "$stInstanc" -eq 1 ] && [ "${#tmp[@]}" -eq 1 ]; then #steviloInstanc==1 IN dolzina TMP tabele = 1
  47. tabelaPidov[$steviloPidov]=$tmp
  48. let "steviloPidov++"
  49. kanoPot=$(readlink /proc/$tmp/exe)
  50.  
  51. jeVSlovarProcesov=false
  52. for i in "${!slovarProcesov[@]}"; do #kljuci dobimo: "${!slovarProcesov[@]}" DODAVAMO PIDE MED PRAVE kanPoti
  53. if [ "$kanoPot" == "$i" ]; then
  54. starPid=${slovarProcesov[$i]}
  55. slovarProcesov[$kanoPot]="$starPid $tmp"
  56. jeVSlovarProcesov=true
  57. break
  58. fi
  59. done
  60.  
  61. if ! $jeVSlovarProcesov; then
  62. slovarProcesov[$kanoPot]=$tmp
  63. fi
  64.  
  65.  
  66. argument=$(ps -p $tmp -o cmd= | cut -d" " -f1 --complement) #se v drugo tabelo kanPotSArgPid
  67. for i in "${!kanPotSArgPid[@]}"; do #kljuci dobimo: "${!slovarProcesov[@]}" DODAVAMO PIDE MED PRAVE kanPoti
  68. if [ "$kanoPot $argument" == "$i" ]; then
  69. starPid=${kanPotSArgPid[$i]}
  70. kanPotSArgPid["$kanoPot $argument"]="$starPid $tmp"
  71. jeVSlovarProcesov=true
  72. break
  73. fi
  74. done
  75.  
  76. if ! $jeVSlovarProcesov; then
  77. kanPotSArgPid["$kanoPot $argument"]=$tmp
  78. fi
  79.  
  80.  
  81.  
  82. echo "PID S KANONICNO POTJO S ARGUMENTOM ************* ${kanPotSArgPid["$kanoPot $argument"]}"
  83.  
  84.  
  85.  
  86.  
  87. else #stInstanc vec kot 1 ALI tmp tabele vec kot 1
  88. for pidProcesa in "${tmp[@]}"; do
  89. tabelaPidov[$steviloPidov]=$tmp
  90. let "steviloPidov++"
  91. kanoPot=$(readlink /proc/$pidProcesa/exe)
  92. echo "READLINK ********** $kanoPot*****************"
  93.  
  94. jeVSlovarProcesov=false
  95. for i in "${!slovarProcesov[@]}"; do #kljuci dobimo: "${!slovarProcesov[@]}"
  96. if [ "$kanoPot" == "$i" ]; then
  97. starPid=${slovarProcesov[$i]}
  98. slovarProcesov[$kanoPot]="$starPid $pidProcesa"
  99. jeVSlovarProcesov=true
  100. break
  101. fi
  102. done
  103.  
  104. if ! $jeVSlovarProcesov; then
  105. slovarProcesov[$kanoPot]=$tmp
  106. fi
  107. done
  108. fi
  109.  
  110. echo "SlovarProcesov: ${!slovarProcesov[@]}"
  111. echo "PIDIIIIIIII***************************** ${tabelaPidov[@]}"
  112.  
  113. }
  114.  
  115.  
  116. checkMatchingPids () { #ce se ujemajo
  117. declare -a tmp #tabela temporary
  118. procPidi=$(echo $1 | cut -d":" -f3) #vsi pidi v proc ukazu
  119. if [ "${#procPidi}" -eq 0 ]; then #ce dolzina 0, pidov ni
  120. return 1 #false
  121. fi
  122.  
  123. tmp=(${procPidi//,/ }) #v tabelo vse pide
  124. proces1=$(ps -p ${tmp[0]} -o command=) #prvi iz tabele je proces1
  125. for pidProcesa in "${tmp[@]}"; do #za vsak pid cez tabelo vseh pidov
  126. proces2=$(ps -p ${pidProcesa} -o command=)
  127. echo "checkMatchingPids: $proces1************$proces2"
  128. lenProces1=${#proces1} #dolzina procesa1
  129. if [ "${proces2:0:1}" == "/" ] && [ "${proces2: -($lenProces1)}" == "$proces1" ]; then #ce je enako na zacetku / in na koncu se ujemajo
  130. continue
  131. fi
  132.  
  133. if [ "$proces1" != "$proces2" ]; then
  134. echo "CHECKING ERROR: $proces1************$proces2"
  135. echo "PID matching error: $procPidi" >&2
  136. return 1 #1 -> false
  137. fi
  138. done
  139. return 0 # 0 -> true
  140. }
  141.  
  142. proc() {
  143. echo "PROC**********************************************************************************************************************************$1"
  144. procUkaz=$1
  145. if [ "${procUkaz:0:5}" != "proc:" ]; then #preveri ce NI proc enak PROC:
  146. return
  147. fi
  148.  
  149. if ! checkMatchingPids $1; then #preveri ce se so pidi istih instanc..
  150. return
  151. fi
  152. zadnjiUkaz=$1
  153.  
  154. runPids $1
  155.  
  156.  
  157. # l=${pgrep -P $$}
  158. # echo "POGNANI PROCESI: $l"
  159.  
  160.  
  161. }
  162. log () {
  163. echo "LOG***********************************************************************************************************************************$1"
  164. datum=$(date +%s%3N)
  165. echo "$date" > active.log
  166. for i in "${!kanPotSArgPid[@]}"; do
  167. echo "key : $i, value: ${kanPotSArgPid[$i]}"
  168. echo "$i" >> active.log
  169. echo "${kanPotSArgPid[$i]}" >> active.log
  170. done
  171.  
  172. }
  173. logLast(){
  174. echo "logLast*******************************************************************************************************************************$1 $2"
  175. echo "zadnji ukazzzzz proc: $zadnjiUkaz"
  176.  
  177.  
  178. procPidi=$(echo $zadnjiUkaz | cut -d":" -f3)
  179. tmp=(${procPidi//,/ })
  180. kanoPot=$(readlink /proc/$tmp/exe)
  181. argument=$(ps -p $tmp -o cmd= | cut -d" " -f1 --complement)
  182.  
  183. datum=$(date +%s%3N)
  184. echo "$date" > active.log
  185. echo "$kanoPot $argument" >> active.log
  186. echo "$tmp" >> active.log
  187.  
  188. echo "$kanoPot $argument"
  189. echo "$tmp"
  190.  
  191.  
  192. }
  193. stop () {
  194. echo "STOP**********************************************************************************************************************************$1"
  195. }
  196. exiT () {
  197. echo "EXIT************************************************************************************************************************************$1"
  198. #pkill -TERM -P $$
  199. #kill -9 $$
  200. }
  201.  
  202. while true; do
  203. if read ukaz; then
  204. if [ "$ukaz" == "exit" ]; then
  205. exiT $ukaz
  206. else
  207. if [ "$ukaz" == "log" ]; then
  208. log $ukaz
  209. else
  210. if [ "$ukaz" == "log last" ]; then
  211. logLast $ukaz
  212. else
  213. prviZnaki=${ukaz:0:4} #prve 4 crke ukaza
  214. if [ "$prviZnaki" == "proc" ]; then
  215. proc $ukaz
  216. else
  217. if [ "$prviZnaki" == "stop" ]; then
  218. stop $ukaz
  219. fi
  220. fi
  221. fi
  222. fi
  223. fi
  224. fi
  225. done < "$2"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement