duanmiao6695 2017-04-14 08:47
浏览 33

终止后子进程进行清理

I want to run another binary from go app with something like:

cmd := exec.Command("another_app_binary", "-config", "config.conf")
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
cmd.Run()

When I kill the parent process(code above), child process(another_app_binary) becomes orphan. What options do I have to cleanup child processes after parent exits/TERMINATES? It has to be somewhat platform nutural because I plan to run it on win/linux.

  • 写回答

1条回答 默认 最新

  • dongxianshuai8927 2017-04-14 09:27
    关注

    You can use the os/signal package to listen for the kill signal in your current process.

    import (
        "os/exec"
        "os"
        "os/signal"
    )
    
    // ...
    
    cmd := exec.Command("another_app_binary", "-config", "config.conf")
    cmd.Stdout = os.Stdout
    cmd.Stderr = os.Stderr
    cmd.Run()
    
    c := make(chan os.Signal, 2)
    signal.Notify(c, os.Interrupt, os.Kill)
    go func() {
        <-c
        // cleanup
        cmd.Process.Kill()
        os.Exit(1)
    }()
    
    // ...
    
    评论

报告相同问题?

悬赏问题

  • ¥15 有赏,i卡绘世画不出
  • ¥15 如何用stata画出文献中常见的安慰剂检验图
  • ¥15 c语言链表结构体数据插入
  • ¥40 使用MATLAB解答线性代数问题
  • ¥15 COCOS的问题COCOS的问题
  • ¥15 FPGA-SRIO初始化失败
  • ¥15 MapReduce实现倒排索引失败
  • ¥15 ZABBIX6.0L连接数据库报错,如何解决?(操作系统-centos)
  • ¥15 找一位技术过硬的游戏pj程序员
  • ¥15 matlab生成电测深三层曲线模型代码