ligado, mas não escutando processo

2

código python para daemon simples

import socket
import time
import signal

s=socket.socket()
s.bind(('127.0.1.1', 20201))

def stop(*a, **k):
    global work
    work = False

signal.signal(signal.SIGINT, stop)
signal.signal(signal.SIGTERM, stop)

work = True

while work:
    print('working')
    time.sleep(1)

s.close()

Ele está limitado à porta 20201, portanto, posso ter certeza de que apenas uma instância está em execução. Se eu tentar executar outra instância, vejo erro, exatamente como planejado:

Address already in use

Mas eu não consigo encontrar uma maneira de localizar pid ou qualquer outra informação abount bound port

netstat -a | grep 20201 dá nothig

lsof -i TCP | grep 20201 não fornece nada

ss | grep 20201 não fornece nada

Existe alguma maneira de encontrar o processo para o limite, mas não a porta de escuta?

    
por Justin 31.10.2014 / 14:16

1 resposta

0

Eu tentei lsof -p <pid of python process> . Inclui a linha:

python  1834 barmar    3u  sock    0,6       0t0 70994705 can't identify protocol

Então, enquanto você não consegue encontrar o processo que tem uma porta específica ligada dessa forma, você pode usar

lsof | grep "can't identify protocol"

para localizar todos os processos que possuem portas vinculadas, mas não conectadas ou escutando. Se houver vários, provavelmente você poderá descobrir qual é provável que esteja usando a porta de seu interesse.

Observe que existem outras maneiras de um soquete entrar nesse estado. Quando executei o comando acima, ele listou um processo mysql de tempo ocioso. Isso ocorre porque mysqld fecha conexões de clientes inativas após um tempo limite. mysql detecta isso quando tenta enviar uma nova consulta e se reconecta nesse momento. Mas até então, o processo do cliente ainda tem o antigo soquete aberto, mas não há nenhuma conexão TCP associada a ele.

    
por 31.10.2014 / 21:41

Tags