Zde je několik možností:
- Připojit pomocí gdb a zavolat close() na fd. Můžete mapovat z addr/port na číslo inodu přes /proc/net/tcp a z čísla inodu na FD uvnitř procesu pomocí ls -la /proc/$pid/fd.
- Podvrhnout paket RST. Budete ho muset vygenerovat lokálně a nějak uhodnout číslo SEQ.
- Možná nastavit pravidlo iptables pro generování RST na dalším paketu.
- Napište modul jádra.
Zdá se, že neexistuje dobře podporovaný způsob, jak toho dosáhnout. Je pravděpodobné, že procesy se zhroutí, pokud jsou jejich FD stejně neočekávaně uzavřeny.
Nemůžete zrušit jediné připojení procesu.
Ale můžete to zablokovat pomocí iptables. Připojení tedy nemůže poskytovat ani přijímat data a klient poběží v časovém limitu.
Na linuxovém jádře>=4.9 můžete použít ss
příkaz z iproute2 s klíčem -K
ss -K dst client1.something dport = 49987
jádro musí být zkompilováno s CONFIG_INET_DIAG_DESTROY
možnost povolena.
Můžete zabít podle cílového portu:
ss -K dport = 65987
Jak spustit Nginx v kontejneru Docker bez zastavení?
Proč Maven používá JDK 1.6, ale moje Java verze je 1.7