2) Child + fileevent (channel) proc wasis {arg} { global jobFinished puts "Still at $arg" if {![eof $arg]} { gets $arg data if [eof $arg] { set jobFinished 1 catch {close $arg} puts "EOF reached" return }}} set f [open "|calc " r] fconfigure $f -buffering none -blocking no fileevent $f readable "wasis $f" vwait jobFinished exit