最後日子裏,我感到有點與派生進程奮力殺從分叉一個(孩子)的父母Golang不能殺子從父進程
我不知道爲什麼,但它似乎不殺父母在所有。首先,我堅持它的開放連接,保持進程運行,因爲優雅的關機過程,但它不是那個問題。
如果我從終端發送SIGTERM到它的父母工作完美,但是當孩子發送SIGTERM它不會停止,強制退出是沒有選擇的正常關機的原因。
編輯*進程仍在進程列表中。也許這是父母跟蹤其子女?
一些代碼,不會叉,也許我做了什麼錯在這裏
func (s *Server) Upgrade() error {
tl := s.listener.(*listener)
addr := s.listener.Addr()
name := fmt.Sprintf("%s:%s->", addr.Network(), addr.String())
os.Setenv("PROX_NAME", name)
fl, err := tl.File()
if err != nil {
return fmt.Errorf("Failed to extract file desciptor, %v", err)
}
fd := fl.Fd()
argv0, err := exec.LookPath(os.Args[0])
if err != nil {
return fmt.Errorf("Failed to execute lookpath, %v", err)
}
noCloseOnExec(fd)
files := make([]*os.File, fd+1)
files[syscall.Stdin] = os.Stdin
files[syscall.Stdout] = os.Stdout
files[syscall.Stderr] = os.Stderr
files[fd] = os.NewFile(fd, name)
wd, err := os.Getwd()
if err != nil {
return err
}
os.Setenv("GPROXY_FD", fmt.Sprintf("%d", fd))
os.Setenv("GPROXY_PID", fmt.Sprintf("%d", syscall.Getpid()))
args := []string{"gproxy", "-debug", "start"}
_, err = os.StartProcess(argv0, args, &os.ProcAttr{
Dir: wd,
Env: os.Environ(),
Files: files,
})
return err
}
父終止
func termParentProcess() error {
pid := syscall.Getppid()
return syscall.Kill(pid, syscall.SIGTERM)
}
那'termParentProcess'函數的上下文是什麼?有沒有任何定義的錯誤檢查? – JimB 2014-09-18 21:38:05
這是我的錯我編輯它 – 2014-09-19 06:11:40