Mulțumesc de link - nu m-a dus capul să caut după așa ceva. Din sugestiile
lor am mai încercat următoarele:

# închidere stdin/out/err (nici nu știam că se pot închide)
sh /jffs/script.sh >&- 2>&- <&- &

Am încercat și codul de mai sus, dar la rulare în dă eroarea:
"/tmp/coproc.sh: line 13: syntax error: unexpected redirection" la linia
"exec {i}<> <(:) {o}<> >(:) {e}<> >(:)"

Recunosc că nivelul de bash e peste capul meu și nu înțeleg ce vrea să
facă, dar presupun că e și peste capul ash-ului meu.

Între timp m-am apucat de cross-compilat firmware-ul tomato - mai ales
încerc să cross-compilez un busybox cu un shell mai deștept (sau ceva
echivalent). În caz că e prea mare, încerc și varianta cu daemon în C +
fork de shell nou.

Vă țin la curent cu ce îmi iese.


On Wed, Jun 4, 2014 at 9:37 AM, Tudor Gheorghe <thelo...@gmail.com> wrote:

> On 06/04/2014 09:19 AM, Adrian Popa wrote:
> > N-am screen. O să caut unul compilat static, dar problema e că mă aștept
> să
> > fie >64K și nu o să am unde să-l flash-uiesc. Mă mai uit și la varianta
> > unui wrapper simplu în C care să facă fork scriptului sh...
> >
> Ai incercat o cautare pe google dupa busybox background process?
> Am gasit ceva interesant in primul link:
>
> http://stackoverflow.com/questions/285015/linux-prevent-a-background-process-from-being-stopped-after-closing-ssh-client
>
> #!/bin/bash
>
> IFS=
>
> run_in_coproc () {
>      echo "coproc[$1] -> main"
>      read -r; echo $REPLY
> }
>
> # dynamic-coprocess-generator. nice.
> _coproc () {
>      local i o e n=${1//[^A-Za-z0-9_]}; shift
>      exec {i}<> <(:) {o}<> >(:) {e}<> >(:)
> . /dev/stdin <<COPROC "${@}"
>      (("\$@")&) <&$i >&$o 2>&$e
>      $n=( $o $i $e )
> COPROC
> }
>
> # pi-rads-of-awesome?
> for x in {0..5}; do
>      _coproc COPROC$x run_in_coproc $x
>      declare -p COPROC$x
> done
>
> for x in COPROC{0..5}; do
> . /dev/stdin <<RUN
>      read -r -u \${$x[0]}; echo \$REPLY
>      echo "$x <- main" >&\${$x[1]}
>      read -r -u \${$x[0]}; echo \$REPLY
> RUN
> done
> ... save as coproc.sh ...
>
> # ./coproc.sh
> declare -a COPROC0='([0]="21" [1]="16" [2]="23")'
> declare -a COPROC1='([0]="24" [1]="19" [2]="26")'
> declare -a COPROC2='([0]="27" [1]="22" [2]="29")'
> declare -a COPROC3='([0]="30" [1]="25" [2]="32")'
> declare -a COPROC4='([0]="33" [1]="28" [2]="35")'
> declare -a COPROC5='([0]="36" [1]="31" [2]="38")'
> coproc[0] -> main
> COPROC0 <- main
> coproc[1] -> main
> COPROC1 <- main
> coproc[2] -> main
> COPROC2 <- main
> coproc[3] -> main
> COPROC3 <- main
> coproc[4] -> main
> COPROC4 <- main
> coproc[5] -> main
> COPROC5 <- main
> ... and there you go, spawn whatever. the <(:) opens an anonymous pipe
> via process substitution, which dies, but the pipe sticks around because
> you have a handle to it. i usually do a sleep 1 instead of : because its
> slightly racy, and i'd get a "file busy" error -- never happens if a
> real command is ran (eg, command true)
>
> ... "heredoc sourcing":
>
> . /dev/stdin <<EOF
> [...]
> EOF
> ... works on every single shell i've ever tried, including busybox/etc
> (initramfs). i've never seen it done before -- i independently
> discovered it while prodding, who knew source could accept args?? -- but
> it often serves as a much more manageable form of eval, if there is such
> a thing ...
>
>
> --
> Tudor Gheorghe
> _______________________________________________
> RLUG mailing list
> RLUG@lists.lug.ro
> http://lists.lug.ro/mailman/listinfo/rlug
>
_______________________________________________
RLUG mailing list
RLUG@lists.lug.ro
http://lists.lug.ro/mailman/listinfo/rlug

Raspunde prin e-mail lui