From 1fd4fb6a645fa107d644f1ca0a0a8d7aa702e1d5 Mon Sep 17 00:00:00 2001 From: Steve Bennett Date: Wed, 14 Sep 2016 14:15:47 +1000 Subject: signal, exec, wait, pid: improvements, especially to exec - fix popen [open "|pipeline ..."] to return meaningful status in close (but note that stderr is not captured) - popen pipelines can now be used as the target of exec redirection - overally improvements to exec on windows. Now crt file descriptors are used throughout - add support for [pid], [wait] and popen on windows - os.wait is now wait, and integrates with [exec ... &] to be able to wait for running background tasks - [socket pipe] is now also [pipe] and is supported on windows - [file tempfile] is supported on windows - move duplicated code between jim-aio.c and jim-exec.c to jimiocompat.c - Fix [exec] on windows to match unix semantics wrt sharing the parent stream unless redirected rather than using /dev/null - On windows redirect to or from /dev/null is automatically converted to NUL: - If signal support is disabled, implement a minimal Jim_SignalId() for exec and wait - aio now supports getfd, to return the underlying file descriptor. This is used by exec to support redirection, and allows popen channels to support exec redirection. Signed-off-by: Steve Bennett --- tests/exec2.test | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) (limited to 'tests/exec2.test') diff --git a/tests/exec2.test b/tests/exec2.test index e43bba0..91108da 100644 --- a/tests/exec2.test +++ b/tests/exec2.test @@ -44,4 +44,30 @@ test exec2-2.4 "Remove all env var" { array set env [array get saveenv] +test exec2-3.1 "close pipeline return value" { + set f [open |false] + set rc [catch {close $f} msg opts] + lassign [dict get $opts -errorcode] status pid exitcode + list $rc $msg $status $exitcode +} {1 {child process exited abnormally} CHILDSTATUS 1} + +test exec2-3.2 "close pipeline return value" -body { + set f [open "|echo abc | grep def | wc" ] + set rc [catch {close $f} msg opts] + lassign [dict get $opts -errorcode] status pid exitcode + list $rc $msg $status $exitcode +} -match glob -result {1 {child killed*} CHILDKILLED SIGPIPE} + + +test exec2-3.4 "wait for background task" { + set pid [exec sleep 0.1 &] + lassign [wait $pid] status newpid exitcode + if {$pid != $newpid} { + error "Got wrong pid from wait" + } else { + list $status $exitcode + } +} {CHILDSTATUS 0} + + testreport -- cgit v1.1