开发者社区> 问答> 正文

golang执行linux后台命令

前提:
我想通过golang执行linux命令启动一个类似tomcat这样的服务器

问题:
golang可以实现执行命令并启动服务,但是当我把golang关掉的时候,已经启动的服务也会相应关闭,不知道是通过什么方法将两者的关联去掉,即我关闭golang不会关闭通过golang启动的服务。

多谢各位高手了!

展开
收起
a123456678 2016-06-28 15:08:45 4244 0
3 条回答
写回答
取消 提交回答
  • nohup ./app &

    2019-07-17 19:48:23
    赞同 展开评论 打赏
  • 示例:

    package main
    
    import (
        "fmt"
        "os/exec"
        "strings"
    )
    
    func generateBgCmd(name string, arg ...string) string {
        cmdString := fmt.Sprintf(
            "nohup %s %s &",
            name,
            strings.Join(arg, " "),
        )
    
        return cmdString
    }
    
    func main() {
        cmd := exec.Command("/bin/bash", "-c", generateBgCmd("ping", "baidu.com", ">", "/tmp/ping.log"))
        err := cmd.Start()
        fmt.Println("err:", err)
    }
    2019-07-17 19:48:23
    赞同 展开评论 打赏
  • golang执行另外一个程序的时候,比如执行程序B,默认是作为B的父进程启动B的,你可以ps -ef看下父子关系。
    所以你要做的是,让新启动的B进程父进程为1号进程,方法为

    runuser -l root -c "程序 参数 2>&1 &"
    后面的“2>&1 &”不要动,前面的程序和参数替换实际运行的即可

    2019-07-17 19:48:23
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Alibaba Cloud Linux 3 技术揭秘 立即下载
Alibaba Cloud Linux 3 发布 立即下载
ECS系统指南之Linux系统诊断 立即下载