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로 프로세스를 종료할 때까지 클라이언트는 계속 연결됩니다.