| 1940 | } |
| 1941 | |
| 1942 | func (c *Client) killProcessAndWait() error { |
| 1943 | done := c.processDone |
| 1944 | killErr := c.killProcess() |
| 1945 | if done == nil { |
| 1946 | return killErr |
| 1947 | } |
| 1948 | |
| 1949 | select { |
| 1950 | case <-done: |
| 1951 | return killErr |
| 1952 | case <-time.After(processExitTimeout): |
| 1953 | return errors.Join(killErr, fmt.Errorf("timed out waiting for CLI process to exit after kill")) |
| 1954 | } |
| 1955 | } |
| 1956 | |
| 1957 | // monitorProcess signals when the CLI process exits and captures any exit error. |
| 1958 | // processError is intentionally a local: each process lifecycle gets its own |