私は、クライアントサービスとリモートホスト上のEMSブローカープロセス間のTCP切断をシミュレートするためにsocatコマンドを使用しようとしています。私はこの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 コマンドを実行した直後には、プロセスが 1 つだけ表示されます。
[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 のプロセスを強制終了するまでクライアントは接続されたままになります。