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端口
执行脚本后就是自动退出的,占用端口那就监听端口,http或者websocket这些都行,没有具体想做什么,其他的没法给得出意见
那不就是启动了一个服务器.....你for循环不就行了....
run 方法是同步方法,把run放在另一个goroutine中执行,main执行连接操作,或者使用 cmd.Start + cmd.Wait ,start是异步
channel阻塞嘛
var shutdown = make(chan os.Signal, 1)
signal.Notify(shutdown, syscall.SIGQUIT, syscall.SIGTERM, syscall.SIGSTOP, syscall.SIGINT)
<-shutdown
能改自研应用吗
goroutine是个好东西,但是我喜欢用time.Sleep