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 關注
- 211 瀏覽
添加回答
舉報