in reply to Re^3: Testing for a background process waiting for input (use a thread)
in thread Testing for a background process waiting for input
a "unixish" implementation of BrowserUk's idea
Nice!++
the backspace cancellation trick would only work under rare circumstances (AFAICT) — simply reading from stdin would, for example, not treat the backspaces in any special way.
I added a little extra diagnostics. a) When the parent detects that the child entered an input state, it sends it a string "hello\n"; b) when the child enters an input state, it prints out what it receives:
The upshot shows that on Windows at least, even though the child (perl in this case) only uses a standard read from stdin scalar <STDIN>, the CRT provides line-editing that allows the backspace cancellation to work:
C:\test>detectChildInputState -I=0 -N=2 Kid done Kid never entered input state Parent done C:\test>detectChildInputState -I=1 -N=2 Child waiting for input Parent done Kid got hello Kid done C:\test>detectChildInputState -I=0 -N=10 Command timed out Kid never entered input state Parent done C:\test>detectChildInputState -I=1 -N=10 Child waiting for input Parent done Kid got hello Kid done C:\test>detectChildInputState -I=0 -N=12 Command timed out Kid never entered input state Parent done C:\test>detectChildInputState -I=1 -N=12 Command timed out Kid never entered input state Parent done
But I guess what you are saying is that under *nix, the standard CRT input routines don't provided line editing facilities, unless the program in question uses a readline(3) library or similar.
Would nulls be an workable alternative? Or DC1/DC3 (XON/XOFF)?
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^5: Testing for a background process waiting for input (use a thread)
by Eliya (Vicar) on Apr 15, 2012 at 04:22 UTC |