cmd->golang->pipe
pipe()创建2个文件描述符,fd[0]可读,fd[1]可写
fork() 创建子进程 fd[1]被继承到子进程
dup2() 重定向子进程 stdout/stderr到fd[1]
exec() 在当前进程内,加载并执行二进制程序
模拟一下cmd调用
模拟调用cmd时,杀死bash进程
go开源Cronexpr库
Parse() 解析与校验Cron表达式
Next() 根据当前时间,计算下一次调度时间
模拟一下cron调用
执行结果
模拟多个cron调用
执行结果
import ("bytes"
"fmt"
"os/exec"
)
func exec_shell() (string, error){
//函数返回一个*Cmd,用于使用给出的参数执行name指定的程序
cmd := exec.Command("shutdown", "-h","now")
//读取io.Writer类型的cmd.Stdout,再通过bytes.Buffer(缓冲byte类型的缓冲器)将byte类型转化为string类型(out.String():这是bytes类型提供的接口)
var out bytes.Buffer
cmd.Stdout = &out
//Run执行c包含的命令,并阻塞直到完成。 这里stdout被取出,cmd.Wait()无法正确获取stdin,stdout,stderr,则阻塞在那了
err := cmd.Run()
return out.String(), err
}
func main(){
if result,err:=exec_shell()err!=nil{
fmt.Println("error:",err)
}else{
fmt.Println("exec succ ", result)
}
}