feat: 优化 CPU 和磁盘信息获取,增强对 Server 版本的支持,改进终端关闭逻辑

This commit is contained in:
Akizon77
2025-06-09 00:57:17 +08:00
parent 6e4bd4e4ae
commit ef2c638932
4 changed files with 49 additions and 19 deletions

View File

@@ -8,6 +8,7 @@ import (
"os/exec"
"strings"
"syscall"
"time"
"github.com/creack/pty"
)
@@ -94,9 +95,28 @@ type unixTerminal struct {
func (t *unixTerminal) Close() error {
pgid, err := syscall.Getpgid(t.cmd.Process.Pid)
if err != nil {
return t.cmd.Process.Kill()
pgid = t.cmd.Process.Pid
}
return syscall.Kill(-pgid, syscall.SIGKILL)
_ = syscall.Kill(-pgid, syscall.SIGTERM)
done := make(chan error, 1)
go func() {
done <- t.cmd.Wait()
}()
select {
case err := <-done:
if err == nil {
} else {
if exitErr, ok := err.(*exec.ExitError); ok && exitErr.Exited() {
return nil
}
return fmt.Errorf("process group did not exit gracefully: %v", err)
}
return err
case <-time.After(5 * time.Second):
}
// 超时未退出,强制 SIGKILL
_ = syscall.Kill(-pgid, syscall.SIGKILL)
return <-done
}
func (t *unixTerminal) Read(p []byte) (int, error) {