2 回答

TA贡献1876条经验 获得超5个赞
在 linux go 版本 1.15.2 上,我运行下面的代码,它会产生一个不会随 main 死的新进程。
package main
import (
"log"
"os"
"os/exec"
)
func main() {
cmd := exec.Command("go", "run", "./d")
cmd.Stdin = os.Stdin
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
log.Printf("Running command and waiting for it to finish...")
err := cmd.Start()
if err != nil {
log.Fatal("cmd.Start failed: ", err)
}
err = cmd.Process.Release()
if err != nil {
log.Fatal("cmd.Process.Release failed: ", err)
}
}
./d/main.go在哪里
package main
import (
"fmt"
"time"
)
func main() {
go func() {
for {
fmt.Println("hop")
<-time.After(time.Second)
}
}()
<-make(chan bool)
}

TA贡献1828条经验 获得超4个赞
.Process.Release()我有一个场景,当父进程退出后,即使使用 , 生成的进程也会被杀死。
我根据这篇文章找到了一个解决方案:https ://www.tecmint.com/run-linux-command-process-in-background-detach-process/
通过使用nohupLinux 命令,我能够创建一个完全独立于任何其他进程的进程。(它会直接systemd在进程树下运行)
这是一个示例代码:
package main
import (
"fmt"
"os/exec"
)
func main(){
exePath="_path_to_the_background_process"
cmd := exec.Command("/usr/bin/nohup", exePath, "parameter1", "parameter2")
if err := cmd.Start(); err != nil {
fmt.Println("There was a problem running ", exePath, ":", err)
} else {
cmd.Process.Release()
fmt.Println(exePath, " has been started.")
}
}
注意:这/usr/bin/nohup是我系统中的路径nohup。可以通过运行找到whereis nohup
- 2 回答
- 0 关注
- 186 浏览
添加回答
举报