go 执行系统程序, 无法保持会话,如何处理?

  • com 为一个自研的应用程序,当通过com + commnad 参数执行后,会在系统中占用系统2121 端口,启动后占用当前终端。
  • 当2121 端口开启后,我需要用net 连上2121 端口并向改终端发送指令
    cmd := exec.Command(com, command…)
    var stdin, _, stderr bytes.Buffer
    cmd.Stdin = &stdin
    cmd.Stdout = os.Stdout
    cmd.Stderr = &stderr
    host, _ := “localhost:2121”
    cmd.Run()
    NewConnector(host + “:” + port)

1. 运行环境

GO 1.19

2. 问题描述?

cmd.Run() 这行执行完后,程序就退出了,然后我尝试阻塞main 进程,还是不行。 cmd.Run()中的cmd 执行完成后,就自动释放了2121 端口

3. 您期望得到的结果?

 希望能找到一个解决方案,能让cmd 保持执行,能让我后续能正常连到2121端口

4. 您实际得到的结果?

go 执行系统程序, 无法保持会话,如何处理?

讨论数量: 12

执行脚本后就是自动退出的,占用端口那就监听端口,http或者websocket这些都行,没有具体想做什么,其他的没法给得出意见

1年前 评论
ision (楼主) 1年前
deatil (作者) 1年前
ision (楼主) 1年前
DianWang

那不就是启动了一个服务器.....你for循环不就行了....

1年前 评论
ision (楼主) 1年前
DianWang (作者) 1年前

run 方法是同步方法,把run放在另一个goroutine中执行,main执行连接操作,或者使用 cmd.Start + cmd.Wait ,start是异步

1年前 评论

channel阻塞嘛
var shutdown = make(chan os.Signal, 1)
signal.Notify(shutdown, syscall.SIGQUIT, syscall.SIGTERM, syscall.SIGSTOP, syscall.SIGINT)
<-shutdown

1年前 评论

能改自研应用吗

1年前 评论
ision (楼主) 1年前

goroutine是个好东西,但是我喜欢用time.Sleep

1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!