Guest User

Untitled

a guest
Apr 19th, 2018
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.83 KB | None | 0 0
  1. #!/usr/bin/bash
  2. PID_MAIN=$$
  3.  
  4. # notify subshells on ctrl-c
  5. trap "kill 0" SIGINT
  6.  
  7. function wrk() { while read data; do echo $1 _${data}_; done }
  8.  
  9. function shw() {
  10. pid=$1
  11. fd=$2
  12. while IFS= read result; do
  13. echo out: $result
  14. done < /proc/${pid}/fd/${fd}
  15. }
  16.  
  17. # return worker names like "wrk0"
  18. function workers() {
  19. for i in {1..5}; do
  20. echo wrk${i}
  21. done
  22. }
  23.  
  24. # spawn worker and printer processes
  25. for worker in $(workers); do
  26. eval "coproc ${worker} { wrk $worker; }"
  27. fdname="${worker}[0]"
  28. ( shw ${PID_MAIN} ${!fdname} ) &
  29. done
  30.  
  31.  
  32. echo Filedescriptors of main process:
  33. ls -lFh /proc/$$/fd/
  34.  
  35. echo List of processes in processgroup:
  36. jobs -l
  37.  
  38. echo feeding some test data to the workers
  39. for worker in $(workers); do
  40. fdname="${worker}[1]"
  41. echo $fdname
  42. echo test > /proc/$PID_MAIN/fd/${!fdname}
  43. done
  44.  
  45. sleep 100
  46. kill 0
  47. exit
Add Comment
Please, Sign In to add comment