【后端编程】使用go语言实现一个守护进程

  • 首先我们要知道
    ①什么是守护进程;?
    ②为什么要使用守护进程?

    答案:
    ①所谓守护进程,就是不依赖任何终端的进程,也就是说如果你在当前这个终端启动了一个守护进程,然后把这个终端关了。如果是一个普通进程,而不是守护进程,那么它也会随着终端的关闭而终止。但是守护进程就比较牛逼了当你再次打开一个新的终端的时候,只要该守护进程的任务没有完成,那么你仍然可以看到它
    ②他有什么用呢?比如我正在做的服务端,你想象一下,你买了一台华为云服务器,然后远程连接以后,启动了你的服务进程,如果你的进程不是守护进程,那么在你关闭你终端的时候,你的服务进程也终止了,这可不是你想要的结果啊。所以说我们的服务器,特别是云服务器一定是以守护进程的方式在运行。
  • 好,下面我们来看下,具体要怎么样实现一个守护进程。其实代码贼简单:
//sub.go
package main
import (
	"time"
	"os"
)
func main(){

	f,err := os.OpenFile("./out.log",os.O_CREATE| os.O_APPEND|os.O_WRONLY,0600)
	if err != nil {
			return
	}
	for i := 0; i < 10000; i++{//这个循环就是每隔两秒向文件out.log中写入当前时间
		str := string(time.Now().String())  +string("I am ok\n")
		_,err := f.WriteString(str )
		if err != nil {
			return
		}
		time.Sleep(time.Second * 2)
	}
}

  • 上面这个进程是子进程,也就是我们将要实现的守护进程,它主要供能就是每隔两秒向文件中写入当前的时间。
package main
import(
	"fmt"
	"os/exec"
	"os"
)
func main(){
	cmd := exec.Command("./sub")
	err := cmd.Start()
	if err != nil{
		fmt.Println(err)
	}
	os.Exit(0)
}

  • 上面这段代码更加简单了,首先将我们要执行的程序路径传给exec.Command(),然后使用cmd.Start()去执行这个程序。
  • 这里需要说明一下,cmd有两种执行方式Run()Start(),这里面Run()是同步执行,也就是说,Run()之后,主进程会一直等待,等到子进程执行完毕之后才会返回;而Start()不会等子进程,子进程开始执行它就退出了,一退出整个父进程就退出了(我们程序中),然后子进程就成了守护进程。
  • 这里还要说一点的就是孤儿进程和守护进程,感觉这两个进程在系统上没有本质的区别,也向各位请教,为什么没有本质区别的东西,却有两种叫法,希望各位赐教。

你可能感兴趣的:(后端开发,操作系统概念,go语言)