我正在使用golang调用pppd,然后过一会儿将其杀死。但是,以这种方式我得到了许多已失效的过程。

这就是我运行pppd的方式

exec.Command("sh", "-c", "pppd call vpn").CombinedOutput()

这就是我杀死它的方法。

exec.Command("sh", "-c", "pkill pppd").CombinedOutput()

然后我得到了很多

root     31541 23536  0 10:54 ?        00:00:00 [pppd] 
root     31929 23356  0 10:55 ?        00:00:00 [pptpgw] 
root     31933 23356  0 10:55 ?        00:00:00 [pptpcm] 
root     31940 23356  0 10:55 ?        00:00:00 [pppd] 
root     31993 23536  0 10:55 ?        00:00:00 [pptpgw] 
root     31997 23536  0 10:55 ?        00:00:00 [pptpcm] 
root     31998 23536  0 10:55 ?        00:00:00 [pppd] 
root     32012 23356  0 10:55 ?        00:00:00 [pptpgw] 
root     32016 23356  0 10:55 ?        00:00:00 [pptpcm] 
root     32017 23356  0 10:56 ?        00:00:00 [pppd] 
root     32070 23536  0 10:56 ?        00:00:00 [pptpgw] 
root     32074 23536  0 10:56 ?        00:00:00 [pptpcm] 
root     32075 23536  0 10:56 ?        00:00:00 [pppd] 
root     32083 23356  0 10:56 ?        00:00:00 [pptpgw] 
root     32087 23356  0 10:56 ?        00:00:00 [pptpcm] 
root     32089 23356  0 10:56 ?        00:00:00 [pppd] 
root     32131 23536  0 10:57 ?        00:00:00 [pptpgw] 
root     32135 23536  0 10:57 ?        00:00:00 [pptpcm] 
root     32148 23536  0 10:57 ?        00:00:00 [pppd] 
root     32160 23356  0 10:57 ?        00:00:00 [pptpgw] 
root     32164 23356  0 10:57 ?        00:00:00 [pptpcm] 
root     32165 23356  0 10:57 ?        00:00:00 [pppd] 
root     32177 23536  0 10:57 ?        00:00:00 [pptpgw] 
root     32181 23536  0 10:57 ?        00:00:00 [pptpcm] 

我如何避免失效的过程。



1> Milo Christi..:
wait
(*Cmd).Wait()Wait

(*Cmd).CombinedOutput()(*Cmd).Run()(*Cmd).Wait()sh
exec.Command("pppd", "call", "vpn").CombinedOutput()

那会教我下次更仔细地阅读文档...


实际上.CombinedOutput()已经调用了wait()。我猜想wait()只在等待sh而不是sh创建的子进程。你知道如何解决这个问题吗?