我正在使用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创建的子进程。你知道如何解决这个问题吗?