libct: suppress bogus "unable to terminate" warnings

While working on a test case for [1], I got the following warning:

> level=warning msg="unable to terminate initProcess" error="exit status 1"

Obviously, the warning is bogus since the initProcess is terminated.

This is happening because terminate() can return errors from either
Kill() or Wait(), and the latter returns an error if the process has
not finished successfully (i.e. exit status is not 0 or it was killed).

Check for a particular error type and filter out those errors.

[1] https://github.com/opencontainers/runc/issues/2683

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
This commit is contained in:
Kir Kolyshkin
2021-01-04 15:39:05 -08:00
parent 04b7b7d3c3
commit d7df30181b
+10 -2
View File
@@ -2067,9 +2067,17 @@ func ignoreTerminateErrors(err error) error {
if err == nil {
return nil
}
// terminate() might return an error from ether Kill or Wait.
// The (*Cmd).Wait documentation says: "If the command fails to run
// or doesn't complete successfully, the error is of type *ExitError".
// Filter out such errors (like "exit status 1" or "signal: killed").
var exitErr *exec.ExitError
if errors.As(err, &exitErr) {
return nil
}
s := err.Error()
if strings.Contains(s, "signal: killed") ||
strings.Contains(s, "process already finished") ||
if strings.Contains(s, "process already finished") ||
strings.Contains(s, "Wait was already called") {
return nil
}