zoukankan      html  css  js  c++  java
  • GO执行shell命令

    Golang执行shell命令主要依靠exec模块

    代码为核心逻辑,并非全部

    运行命令

    cmd1 = exec.Command("ls")
    if err = cmd1.Run(); err != nil {
    	log.Fatal(err)
    }
    

    运行命令并获取返回值

    cmd2 = exec.Command("bash", "-c", "echo hello")
    if output, err = cmd2.CombinedOutput(); err != nil {
    	log.Fatal(err)
    }
    fmt.Println(string(output))
    

    运行命令并强制结束

    // 使用waitgroup实现并发同步
    var wg sync.WaitGroup
    // 使用上下文实现强制结束
    ctx, cancelFunc = context.WithCancel(context.TODO())
    wg.Add(1)
    go func() {
    	var (
    		output []byte
    		err    error
    	)
    	// 将context传入cmd实现channel的监听和任务强杀
    	cmd3 = exec.CommandContext(ctx, "bash", "-c", "sleep 2; echo hello")
    	if output, err = cmd3.CombinedOutput(); err != nil {
    		// 2019/12/10 19:23:25 signal: killed
    		log.Println(err)
    	}
    	// output为空
    	fmt.Println(string(output))
    	wg.Done()
    }()
    time.Sleep(1 * time.Second)
    // 强制结束命令
    cancelFunc()
    wg.Wait()
    
  • 相关阅读:
    BZOJ 3189. [Coci2011]Slika
    BZOJ3188. [Coci 2011]Upit
    P4304 [TJOI2013]攻击装置
    P3966 [TJOI2013]单词
    P3964 [TJOI2013]松鼠聚会
    BZOJ 3157: 国王奇遇记
    设计模式--策略模式
    SSM整合步骤
    Mybatis笔记二
    Java调用WebService之Axis实现
  • 原文地址:https://www.cnblogs.com/Peter2014/p/12018661.html
Copyright © 2011-2022 走看看