]> Cypherpunks repositories - gostls13.git/commitdiff
os: add ExitCode method to ProcessState
authorGuoliang Wang <iamwgliang@gmail.com>
Tue, 28 Aug 2018 01:03:37 +0000 (01:03 +0000)
committerBrad Fitzpatrick <bradfitz@golang.org>
Tue, 28 Aug 2018 01:46:11 +0000 (01:46 +0000)
Fixes #26539

Change-Id: I6d403c1bbb552e1f1bdcc09a7ccd60b50617e0fc
GitHub-Last-Rev: 0b5262df5d99504523fd7a4665cb70a3cc6b0a09
GitHub-Pull-Request: golang/go#26544
Reviewed-on: https://go-review.googlesource.com/125443
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
src/os/exec/exec_test.go
src/os/exec_plan9.go
src/os/exec_posix.go

index 7bb230806f95ad853fa6d0fc06d84484949ec39d..f0bba11c5a38a2d340e3c8920b212864258460f0 100644 (file)
@@ -168,6 +168,49 @@ func TestExitStatus(t *testing.T) {
        }
 }
 
+func TestExitCode(t *testing.T) {
+       // Test that exit code are returned correctly
+       cmd := helperCommand(t, "exit", "42")
+       cmd.Run()
+       want := 42
+       got := cmd.ProcessState.ExitCode()
+       if want != got {
+               t.Errorf("ExitCode got %d, want %d", got, want)
+       }
+
+       cmd = helperCommand(t, "/no-exist-executable")
+       cmd.Run()
+       want = 2
+       got = cmd.ProcessState.ExitCode()
+       if want != got {
+               t.Errorf("ExitCode got %d, want %d", got, want)
+       }
+
+       cmd = helperCommand(t, "exit", "255")
+       cmd.Run()
+       want = 255
+       got = cmd.ProcessState.ExitCode()
+       if want != got {
+               t.Errorf("ExitCode got %d, want %d", got, want)
+       }
+
+       cmd = helperCommand(t, "cat")
+       cmd.Run()
+       want = 0
+       got = cmd.ProcessState.ExitCode()
+       if want != got {
+               t.Errorf("ExitCode got %d, want %d", got, want)
+       }
+
+       // Test when command does not call Run().
+       cmd = helperCommand(t, "cat")
+       want = -1
+       got = cmd.ProcessState.ExitCode()
+       if want != got {
+               t.Errorf("ExitCode got %d, want %d", got, want)
+       }
+}
+
 func TestPipes(t *testing.T) {
        check := func(what string, err error) {
                if err != nil {
index 6b4d28c93da5f0aea58633104463b4fe1f69898d..bab16ccad34ccf3f18bf1c1e0a63775928c6c144 100644 (file)
@@ -136,3 +136,13 @@ func (p *ProcessState) String() string {
        }
        return "exit status: " + p.status.Msg
 }
+
+// ExitCode returns the exit code of the exited process, or -1
+// if the process hasn't exited or was terminated by a signal.
+func (p *ProcessState) ExitCode() int {
+       // return -1 if the process hasn't started.
+       if p == nil {
+               return -1
+       }
+       return p.status.ExitStatus()
+}
index ec5cf332360689676b198b437338ee157aa0888a..e837e1c4d998f87d3c36b440078db0c27a6749d1 100644 (file)
@@ -106,3 +106,13 @@ func (p *ProcessState) String() string {
        }
        return res
 }
+
+// ExitCode returns the exit code of the exited process, or -1
+// if the process hasn't exited or was terminated by a signal.
+func (p *ProcessState) ExitCode() int {
+       // return -1 if the process hasn't started.
+       if p == nil {
+               return -1
+       }
+       return p.status.ExitStatus()
+}