Ich habe Ping-Funktion, die funktioniert gut unter Windows, aber nicht unter Linux. Unter Linux pingt es wenige Hosts und stoppt (wird nicht beendet).Golang sync.WaitGroup nicht unter Linux
Ich kann Hunderte von Hosts unter Windows pingen, aber nicht unter Linux. Schauen Sie sich https://github.com/irom77/go-public/blob/master/gping/main.go für die ganze Sache
func ping(ip string, wg *sync.WaitGroup, os string) {
_ , err := exec.Command("ping", os, *PINGCOUNT, "-w", *PINGTIMEOUT, ip).Output()
if err == nil {
count++
fmt.Printf("%d %s \n", count, ip)
}
wg.Done()
}
Wenn Ergebnis Druck (Hinzufügen 'Ergebnis' innerhalb func ping)
result , err := exec.Command("ping", os, *PINGCOUNT, "-w", *PINGTIMEOUT, ip).Output()
fmt.Printf("%s\n", result)
ich korrekte Ausgabe nur bekam, aber es tut auch weiterhin neben IPs ping
....
--- 10.192.167.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 476.564/476.564/476.564/0.000 ms
49 10.192.167.1
erwarten mehr IPs hier (gut in Windows)
Wo fügen Sie Dinge aus der WaitGroup hinzu und entfernen sie? – JimB
Wenn Sie die WaitGroup in der Goroutine selbst hinzufügen, wird dies wahrscheinlich passieren. –
Ich füge 'wg.Add (len (hosts))' kurz vor for loop in main() hinzu. Entferne nie etwas, es gibt 'wg.Wait()' gleich nach der Schleife – irom