Re:Taming non-terminating Bash processes
by fensipens on Saturday November 08, 2014 @04:38PM
(#8578223)
Try something like this (untested):
#! /bin/sh
fifo=/tmp/discover-vnc.fifo
rm -f $fifo
mkfifo $fifo
dns-sd -B _rfb._tcp >$fifo &
pid=$!
while read line; do
case $line in *_rfb._tcp.*)
# do something here.. then test
# if flag=3 and break otherwise
esac
done <$fifo
kill $pid
Re:Taming non-terminating Bash processes
by pstadler on Saturday November 08, 2014 @05:12PM
(#8578301)
Results from dns-sd are not necessarily being delivered instantly and there might be no lines which contain this flag to check of it's the last entry. It's also rather ugly to create a named pipe for this purpose, don't you think?
Re:Taming non-terminating Bash processes
by fensipens on Saturday November 08, 2014 @06:06PM
(#8578439)
there might be no lines which contain this flag
Again, untested:
#! /bin/sh
timeout=5
fifo=/tmp/discover-vnc.fifo
rm -f $fifo
mkfifo $fifo
dns-sd -B _rfb._tcp >$fifo &
pid1=$!
while read line; do
case $line in *_rfb._tcp.*)
# do something here.. then test
# if flag=3 and break otherwise
esac
done <$fifo &
pid2=$!
sleep $timeout && kill $pid1 $pid2 &
pid3=$!
wait $pid2
kill $pid3
It's also rather ugly to create a named pipe for this purposeBecause it creates a file in /tmp? Who cares? The alternative is bash voodoo magic.. the same magic that gave us shellshock.
Re:Taming non-terminating Bash processes
by pstadler on Saturday November 08, 2014 @07:05PM
(#8578592)
The alternative is bash voodoo magic.. the same magic that gave us shellshock.
I love this one.
Re:Taming non-terminating Bash processes
by fensipens on Saturday November 08, 2014 @04:56PM
(#8578266)
$! is not working with the distributed Bash version (currently 3.2) on OS X.
$ bash --version
GNU bash, version 3.2.48(1)-release (x86_64-apple-darwin10.0)
Copyright (C) 2007 Free Software Foundation, Inc.
$ : & echo $!
[1] 329
329
Re:Taming non-terminating Bash processes
by pstadler on Saturday November 08, 2014 @05:06PM
(#8578293)
$BASHPID is not working with subshells prior to Bash v4.
Re:Taming non-terminating Bash processes
by fensipens on Saturday November 08, 2014 @05:32PM
(#8578340)
$BASHPID and $! are two different things.
Re:Taming non-terminating Bash processes
by pstadler on Saturday November 08, 2014 @06:06PM
(#8578437)
I need to know the PID of the subshell, inside the subshell. $BASHPID was introduced to hold this value. While $$ still contains the PID of the parent process and $! is not available inside the subshell after all.
[1] https://github.com/pstadler/non-terminating-bash-processes#c...
Edit: $! is not working with the distributed Bash version (currently 3.2) on OS X. Unfortunately, dns-sd is the only utility to discover network services on OS X. There are many projects which use the same hack involving dns-sd.
I invite you to find a better solution to this problem.