Ich versuche, mit dem Befehl socat eine TCP-Verbindungstrennung zwischen meinem Client-Dienst und dem EMS-Broker-Prozess auf einem Remote-Host zu simulieren. Ich führe diesen Befehl socat aus
socat TCP-LISTEN:8123,fork TCP:Remotehostname:Port
Ich führe diesen Befehl beispielsweise auf einem Server ausServer 1- und ich konfiguriere meinen Client-Dienst für die Verbindung mitServer1:8123– wodurch der Client eine Verbindung mit dem eigentlichen EMS-Broker herstellen kann.
Wenn ich jedoch eine Trennung simulieren möchte, beende ich den Socat-Prozess (ich finde die PID mit „ps aux | grep socat“), aber das scheint die Verbindung nicht zu beenden. Ich sehe, dass der Client immer noch mit dem EMS-Broker kommunizieren kann. (Warum wird Socat in diesem Stadium nicht beendet?)
Wenn ich meinen Client jetzt jedoch neu starte, kann keine Verbindung zum Broker hergestellt werden (weil der Socat-Prozess jetzt wirklich tot ist).
Ich kann nicht herausfinden, was hier passiert. Wie kann ich sicherstellen, dass der Socat-Prozess definitiv beendet wird?
Antwort1
Ich denke, es hängt davon ab, wie Sie den Socat-Prozess beenden. Wahrscheinlich akzeptiert Socat das von Ihnen verwendete Signal nicht. Versuchen Sie es mit 9:
kill -9 pid
Die Ausgabe von ps sollte mehr als eine PID für den Socat-Prozess anzeigen, Sie müssen die richtige auswählen.
Direkt nachdem Sie den Socat-Befehl ausgeführt haben, sollten Sie nur einen Prozess sehen:
[root@centos03 ~]# ps aux | grep socat
root 28801 0.0 0.3 41684 1936 pts/0 S+ 15:22 0:00 socat TCP-LISTEN:8123,fork TCP:web:80
root 28803 0.0 0.1 103244 848 pts/3 S+ 15:22 0:00 grep socat
Sobald der Client eine Verbindung hergestellt hat, sollten Sie einen weiteren Vorgang sehen:
[root@centos03 ~]# ps aux | grep socat
root 28801 0.0 0.3 41684 1940 pts/0 S+ 15:22 0:00 socat TCP-LISTEN:8123,fork TCP:web:80
root 28807 0.0 0.2 45860 1452 pts/0 S+ 15:25 0:00 socat TCP-LISTEN:8123,fork TCP:web:80
root 28809 0.0 0.1 103244 844 pts/3 S+ 15:26 0:00 grep socat
Wenn Sie den Prozess jetzt mit PID 28801 beenden, wird keine neue Verbindung zugelassen, aber der Client bleibt weiterhin verbunden, bis Sie den Prozess mit PID 28807 beenden.