golang daemon
来源:互联网 发布:淘宝四川正品小店售假 编辑:程序博客网 时间:2024/05/14 20:07
最近一段时间在学习go语言的使用
最近在实现一个功能,需要程序有参数选项:deamon;
也就是支持后天运行。于是上网google一个golang deamon
package main import ( "fmt" "log" "os" "runtime" "syscall" "time") func daemon(nochdir, noclose int) int { var ret, ret2 uintptr var err syscall.Errno darwin := runtime.GOOS == "darwin" // already a daemon if syscall.Getppid() == 1 { return 0 } // fork off the parent process ret, ret2, err = syscall.RawSyscall(syscall.SYS_FORK, 0, 0, 0) if err != 0 { return -1 } // failure if ret2 < 0 { os.Exit(-1) } // handle exception for darwin if darwin && ret2 == 1 { ret = 0 } // if we got a good PID, then we call exit the parent process. if ret > 0 { os.Exit(0) } /* Change the file mode mask */ _ = syscall.Umask(0) // create a new SID for the child process s_ret, s_errno := syscall.Setsid() if s_errno != nil { log.Printf("Error: syscall.Setsid errno: %d", s_errno) } if s_ret < 0 { return -1 } if nochdir == 0 { os.Chdir("/") } if noclose == 0 { f, e := os.OpenFile("/dev/null", os.O_RDWR, 0) if e == nil { fd := f.Fd() syscall.Dup2(int(fd), int(os.Stdin.Fd())) syscall.Dup2(int(fd), int(os.Stdout.Fd())) syscall.Dup2(int(fd), int(os.Stderr.Fd())) } } return 0} func main() { daemon(0, 1) for { fmt.Println("hello") time.Sleep(1 * time.Second) } }
留个记录:
转自:golang deamon sample
- golang daemon
- golang 守护进程(daemon)
- daemon
- Daemon
- Daemon
- daemon
- daemon
- daemon
- daemon
- daemon
- daemon
- daemon
- daemon
- Daemon
- Golang
- golang
- golang
- golang
- Android开发——MediaProvider源码分析(1)
- 用辗转相除法求最大公约数.
- \prefences\code\test\源代码\chap1_4\chap1_4view.cpp(184): error C2668: “pow”: 对重载函数的调用不明确
- HOOK DLL
- 关于Cocos2d-x android的环境搭建、Demo运行的注意事项。
- golang daemon
- java中的File.separator
- C#学习记录一:类
- dos窗口输入命令后 提示不是内部或外部命令也不是可执行的程序或批处理文件
- muduo网络库学习之muduo_http 库涉及到的类
- int *p[n]; int (*p)[n];
- yii中Label标签与LabelEx标签的区别
- openwrt启动脚本分析
- OpenGL ES学习2----彩立方制作遇到两个问题