2017-01-26 57 views
2

我有一個去功能捕獲網絡通訊量在MacOS tcpdumb(外部命令):使用tcpdump作爲外部命令:如何正確關閉外部命令?

func start_tcpdump() { 
    // Run tcpdump with parameters 
    cmd := exec.Command("tcpdump", "-I", "-i", "en1", "-w", "capture.pcap") 
    if err := cmd.Start(); err != nil { 
     log.Fatal(err) 
    } 
    timer := time.AfterFunc(3 * time.Second, func() { 
     cmd.Process.Kill() 
    }) 
    err := cmd.Wait() 
    if err != nil{ 
     log.Fatal(err) 
    } 
    timer.Stop() 
} 

當此功能完整的作品,我想在Wireshark來打開輸出文件.pcap和得到這個錯誤: 「 捕獲文件似乎已經在數據包的中間被切斷短
也許, cmd.Process.Kill()中斷.pcap文件的正確關閉。

什麼解決方案可以適用於「適當」關閉tcpdumb外部進程?

+1

tcpdump表示通過SIGINT或SIGTERM正常退出。也許讀取stdout和stderr來查看是否有任何相關消息。 – JimB

回答

3

您應該使用cmd.Process.signal(os.Interrupt)來指示tcpdump退出,Kill()內部調用signal(Kill)這相當於kill -9強制進程​​退出。

+1

啊,是的,默認的posix kill信號是TERM,但這裏殺死的確是SIGKILL。 – JimB

相關問題