我正在嘗試使用 socat 命令來模擬客戶端服務與遠端主機上的 EMS 代理程式之間的 tcp 斷開連接。我正在運行這個 socat 命令
socat TCP-LISTEN:8123,fork TCP:遠端主機名稱:連接埠
我在伺服器上運行這個命令伺服器1- 我正在配置我的客戶端服務以連接到伺服器1:8123- 使客戶端能夠連接到實際的 EMS 代理。
但是 - 當我想模擬斷開連接時 - 我正在終止 socat 進程(我透過 ps aux | grep socat 找到 pid) - 但這似乎並沒有終止連接 - 我可以看到客戶端仍然能夠與之通信ems經紀人。 (為什麼socat在這個階段沒有被殺死?)
但是 - 如果我現在重新啟動客戶端,則它無法連接到代理(因為現在 socat 進程確實已死)。
我無法弄清楚這裡發生了什麼 - 我怎麼能確保 socat 進程肯定被殺死?
答案1
我認為這取決於你如何殺死 socat 進程。可能 socat 不接受您正在使用的訊號,請嘗試使用 9:
kill -9 pid
ps 的輸出應該顯示 socat 進程的多個 pid,您必須選擇正確的一個。
執行 socat 命令後,您應該只看到一個進程:
[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
一旦客戶端建立了連接,您應該會看到另一個進程:
[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
現在,如果您終止 pid 28801 的進程,則不會允許新連接,但用戶端仍將保持連接,直到您終止 pid 28807 的進程