最近写一个go的小程序,启动linux系统上的一个进程并检测其是否启动正常
func main() {
//开始
step1...
step2...
step3...
go proc.StartProcess()
// 检查进程是否ok
for {
time.Sleep(time.Second * 1)
if proc.StartError {
//不ok
return
}
if proc.Running {
//ok
break
}
}
//结束
}
external_process.go
type ExternalProcess struct {
AsUser string
EnvMap map[string]string
Process string
Args []string
RunningFlag string
StartError bool
IPid int
Running bool
}
func (externalProcess *ExternalProcess) StartProcess() {
step1
step2
go externalProcess.checkProcess(stdoutPipe)
step3
err = cmd.Wait()
}
func (externalProcess *ExternalProcess) checkProcess(stdoutPipe io.ReadCloser) {
for {
line, _, err := lineReader.ReadLine()
logger.Info(string(line))
if strings.Contains(string(line), externalProcess.RunningFlag) {
logger.Info("running flag mapped")
externalProcess.Running = true
break
}
if err == io.EOF {
externalProcess.StartError = true
break
}
}
}
有疑问加站长微信联系(非本文作者)