Estoy intentando utilizar el comando socat para simular una desconexión TCP entre mi servicio de cliente y el proceso del intermediario EMS en un host remoto. Estoy ejecutando este comando socat
socat TCP-LISTEN:8123,fork TCP:nombre de host remoto:puerto
Ejecuto este comando en un servidor, digoservidor 1- y estoy configurando mi servicio de cliente para conectarmeservidor1:8123- lo que permite al cliente conectarse al agente EMS real.
Sin embargo, cuando quiero simular una desconexión, estoy eliminando el proceso socat (encuentro el pid mediante ps aux | grep socat), pero eso no parece eliminar la conexión. Puedo ver que el cliente aún puede hablar con el corredor de ems. (¿Por qué no se mata a socat en esta etapa?)
Sin embargo, si ahora reinicio mi cliente, no se podrá conectar con el corredor (porque ahora el proceso socat está realmente muerto).
No puedo entender qué está pasando aquí. ¿Cómo puedo asegurarme de que el proceso socat finalice definitivamente?
Respuesta1
Creo que depende de cómo elimines el proceso socat. Probablemente socat no acepta la señal que estás usando, prueba con 9:
kill -9 pid
La salida de ps debería mostrar más de un pid para el proceso socat, debes elegir el correcto.
Inmediatamente después de haber ejecutado el comando socat, debería ver solo un proceso:
[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
Una vez que el cliente haya establecido una conexión, debería ver otro proceso:
[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
Ahora, si finaliza el proceso con el pid 28801, no se permitirá ninguna nueva conexión, pero el cliente seguirá conectado hasta que finalice el proceso con el pid 28807.