发布时间:2024-12-23 02:55:55
获取所有进程
使用os包的Getprocs函数可以获取当前系统中的所有进程。它返回一个包含所有进程信息的切片,每个进程信息包含进程ID、父进程ID、进程名等。 ```go package main import ( "fmt" "log" "os" ) func main() { procs, err := os.Getprocs() if err != nil { log.Fatal(err) } for _, proc := range procs { fmt.Printf("PID: %d, Parent PID: %d, Name: %s\n", proc.Pid, proc.Ppid, proc.Name) } } ```通过进程ID获取进程信息
如果我们知道了特定进程的进程ID,我们可以使用os包的FindProcess函数获取该进程的详细信息。FindProcess函数返回一个Process对象,该对象包含有关进程的信息以及可以执行其他与进程相关的操作的方法。 ```go package main import ( "fmt" "log" "os" ) func main() { pid := 12345 proc, err := os.FindProcess(pid) if err != nil { log.Fatal(err) } fmt.Printf("PID: %d, Parent PID: %d, Name: %s\n", proc.Pid, proc.Ppid, proc.Name()) } ```通过进程名获取进程信息
如果我们只知道进程的名称而不是进程ID,我们可以使用os包的LookPath函数来查找该进程的可执行文件的路径。然后,我们可以使用该可执行文件的路径获取进程的详细信息。 ```go package main import ( "fmt" "log" "os" ) func main() { name := "firefox" path, err := os.LookPath(name) if err != nil { log.Fatal(err) } proc, err := os.FindProcess(os.Getpid()) if err != nil { log.Fatal(err) } fmt.Printf("Path: %s, PID: %d, Parent PID: %d\n", path, proc.Pid, proc.Ppid) } ```杀死进程
使用os包的Kill函数可以通过进程ID终止一个进程。我们只需要指定要终止的进程ID以及终止的信号。 ```go package main import ( "log" "os" "syscall" ) func main() { pid := 12345 err := syscall.Kill(pid, syscall.SIGTERM) if err != nil { log.Fatal(err) } } ```等待退出
使用os包的Wait函数可以使当前进程等待指定进程退出。这对于需要与其他进程进行同步或等待其他进程完成某些操作的情况非常有用。 ```go package main import ( "fmt" "log" "os" ) func main() { pid := 12345 proc, err := os.FindProcess(pid) if err != nil { log.Fatal(err) } state, err := proc.Wait() if err != nil { log.Fatal(err) } fmt.Printf("PID: %d exited with status: %d\n", state.Pid(), state.ExitStatus()) } ```