Open 113xiaoji opened 9 months ago
When using crictl to execute the exec command, there is an intermittent error reported:
crictl
exec
execing command in container: error stream protocol error: invalid exit code value 4294967295
The relevant Go code snippet is as follows:
return pidMonitor.pidPoller.Add(pidFD, func() error { execPid := e.Pid() status := 256 event, err := execExitStore.GetExitedEvent(e.traceEventID) if err == nil && event.Pid == uint32(execPid) { status = int(event.ExitCode) } execExitStore.DeleteExitedEvent(e.traceEventID) e.SetExited(status) return nil })
When event, err := execExitStore.GetExitedEvent(e.traceEventID) encounters an error, the status is set to 256. The setExited method then calls unix.WaitStatus(status).ExitStatus(), as shown here:
event, err := execExitStore.GetExitedEvent(e.traceEventID)
setExited
unix.WaitStatus(status).ExitStatus()
func (e *execProcess) setExited(status int) { e.status = unix.WaitStatus(status).ExitStatus() e.exited = time.Now() if e.parent.platform != nil { e.parent.platform.ShutdownConsole(context.Background(), e.console) } close(e.waitBlock) }
According to the source code, this will return -1:
func (w WaitStatus) ExitStatus() int { if !w.Exited() { return -1 } return int(w>>shift) & 0xFF }
As a result, the error message is generated:
When using
crictl
to execute theexec
command, there is an intermittent error reported:The relevant Go code snippet is as follows:
When
event, err := execExitStore.GetExitedEvent(e.traceEventID)
encounters an error, the status is set to 256. ThesetExited
method then callsunix.WaitStatus(status).ExitStatus()
, as shown here:According to the source code, this will return -1:
As a result, the error message is generated:
execing command in container: error stream protocol error: invalid exit code value 4294967295