gin长时间不连接,api没响应,exec执行外部命令超时

1.gin长时间不连接,api没响应

当我在windows上,长时间不连接打包好的服务,过后我突然连接不上。

	 if err := r.Run(":8081"); err != nil {
		log.Fatalf("Failed to start server: %v", err)
	 }

后来更改代码,我现在不会突然无响应。不知道什么原因

server := &http.Server{
		Addr:         ":8081",          // 监听端口
		Handler:      r,                // 使用 Gin 路由
		ReadTimeout:  10 * time.Second, // 设置读取超时时间为 10 秒
		WriteTimeout: 10 * time.Second, // 设置写入超时时间为 10 秒
	}

	// 启动 HTTP 服务器
	if err := server.ListenAndServe(); err != nil && err != http.ErrServerClosed {
		// 打印错误信息
		panic(err)
	}

2.使用exec执行外部命令时,程序不返回超时信息,卡死

使用cmd.Process.Kill()杀携程

func AddTextToImage(inputImage, textFile, outputImage, fontFile string, fontsize int) error {
	// 构造ffmpeg命令参数

	// -frames:v 1 -update 1
	cmdArgs := []string{
		"-i", inputImage,
		"-vf", fmt.Sprintf("drawtext=textfile='%s':fontcolor=yellow:fontsize=%d:fontfile='%s':x=(W-text_w)/2:y=(H-text_h)/2:shadowx=2:shadowy=2:shadowcolor=black", textFile, fontsize, fontFile),
		// "-frames:v", "1",
		// "-update", "1",
		// "-strict", "-2",
		"-y", outputImage,
	}
	sr := ""
	for _, v := range cmdArgs {
		sr += v + " "
	}
	fmt.Println(sr)
	cmd := exec.Command(pojo.ResultDir+"\\bin\\ffmpeg.exe", cmdArgs...)
	err := cmd.Start()
	if err != nil {
		fmt.Println("启动命令时出错:", err)
		return err
	}

	done := make(chan error, 1)

	go func() {
		done <- cmd.Wait()
	}()

	select {
	case <-time.After(2 * time.Second):
		fmt.Println("已等待1秒,仍然在执行中,程序将退出。")
		// 如果希望杀死正在执行的命令,可以使用以下代码
		// 注意:这里只是示例,实际中可能需要根据具体情况进行处理
		if err := cmd.Process.Kill(); err != nil {
			fmt.Println("杀死命令时出错:", err)
			return err
		}
	case err := <-done:
		if err != nil {
			fmt.Println("命令执行出错:", err)
			return err
		} else {
			fmt.Println("命令执行完成.")
			return nil
		}
	}
	return nil
}
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值