~ knotless Search/
↑↓ move↵ open⇧↵ all results
0
0
main
29 lines · 571 B Raw History
//go:build unix

package devinstance

import (
	"os"
	"syscall"
)

func SpawnDetached(argv []string, logPath string) (int, error) {
	null, err := os.Open(os.DevNull)
	if err != nil {
		return 0, err
	}
	defer null.Close()
	log, err := os.OpenFile(logPath, os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0o600)
	if err != nil {
		return 0, err
	}
	defer log.Close()
	p, err := os.StartProcess(argv[0], argv, &os.ProcAttr{Files: []*os.File{null, log, log},
		Sys: &syscall.SysProcAttr{Setsid: true}})
	if err != nil {
		return 0, err
	}
	pid := p.Pid
	p.Release()
	return pid, nil
}