gpt4 book ai didi

linux - golang 程序在调用 linux shell 命令后终止

转载 作者:IT王子 更新时间:2023-10-29 00:54:45 33 4
gpt4 key购买 nike

我正在以 root 权限执行以下 golang 程序(片段):

  binary, lookErr := exec.LookPath("auditctl")
if lookErr != nil {
panic(lookErr)
}
env := os.Environ()

args := []string{"auditctl", "-D"}
execErr := syscall.Exec(binary, args, env)
if execErr != nil {
fmt.Println("error")
panic(execErr)
}

fmt.Println("no error")

因为我在系统中没有任何 auditctl 规则,命令在终端中打印以下内容。这一切都正常,就像我直接在 shell 中输入一样。

No rules

除了既不打印“error”也不打印“no error”。这意味着 golang 程序在 syscall.Exec 之后立即终止。这是怎么发生的以及我如何在 syscall.Exec 之后继续执行,因为我在同一个程序中还有其他东西要运行。

最佳答案

系统调用.Exec invokes execve(2) ,在 Linux 上不会将执行返回给调用者,而是 replaces调用进程的当前 (Go) 进程。

正如 David Budworth 和 mkopriva 所建议的那样……如果您真的想生成一个单独的进程并在生成后返回您的 Go 代码;考虑使用 exec.Command

关于linux - golang 程序在调用 linux shell 命令后终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42963625/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com