« Back to Index

Go: handle long running process

View original Gist on GitHub

Tags: #go

1. long running process.sh

#!/usr/bin/env bash
#
# NOTE: don't forget to `chmod +x process.sh`

while :
do
  date "+%H:%M:%S"
  sleep 1
done

2. main.go

package main

import (
	"log"
	"os"
	"os/exec"
	"time"
)

func main() {
	cmd := exec.Command("./process.sh")
	cmd.Stdout = os.Stdout
	cmd.Stderr = os.Stderr

	err := cmd.Start()
	if err != nil {
		log.Fatal(err)
	}

	timer := time.NewTimer(time.Second * 5)

	go func(timer *time.Timer, cmd *exec.Cmd) {
		for range timer.C {
			err := cmd.Process.Signal(os.Kill)
			if err != nil {
				log.Fatal(err)
			}
		}
	}(timer, cmd)

	cmd.Wait()
}