|
|
|
@ -86,11 +86,15 @@ proc local_exec { commandline inp outp timeout } { |
|
|
|
# doesn't assign process groups correctly and we can't reliably kill |
|
|
|
# programs that bear children. We can't use tcl's exec because it has |
|
|
|
# no way to timeout programs that hang. *sigh* |
|
|
|
|
|
|
|
# |
|
|
|
# The expect command will close the connection when it sees |
|
|
|
# EOF. Closing the connection may send SIGHUP to the child and |
|
|
|
# cause it to exit before it can exit normally. The child should |
|
|
|
# ignore SIGHUP. |
|
|
|
global errorInfo |
|
|
|
if { "$inp" == "" && "$outp" == "" } { |
|
|
|
set id -1 |
|
|
|
set result [catch "eval spawn \{${commandline}\}" pid] |
|
|
|
set result [catch "eval spawn -ignore SIGHUP \{${commandline}\}" pid] |
|
|
|
if { $result == 0 } { |
|
|
|
set result2 0 |
|
|
|
} else { |
|
|
|
@ -130,7 +134,7 @@ proc local_exec { commandline inp outp timeout } { |
|
|
|
return [list -1 "open of $commandline $inp $outp failed: $errorInfo"] |
|
|
|
} |
|
|
|
set pid [pid $id] |
|
|
|
set result [catch "spawn -leaveopen $id" result2] |
|
|
|
set result [catch "spawn -ignore SIGHUP -leaveopen $id" result2] |
|
|
|
} |
|
|
|
# Prepend "-" to each pid, to generate the "process group IDs" needed by |
|
|
|
# kill. |
|
|
|
|