O melhor teste para ver se um servidor está aceitando conexões é realmente tentar se conectar. Use um cliente regular para qualquer protocolo que seu servidor fale e tente um comando no-op.
Se você quer um cliente TCP ou UDP leve, você pode dirigir simplesmente a partir do shell, use netcat . Como programar uma conversa depende do protocolo; muitos protocolos fazem o servidor fechar a conexão em uma determinada entrada, e o netcat então sairá.
while ! echo exit | nc localhost 13000; do sleep 10; done
Você também pode dizer ao netcat para sair depois de estabelecer a conexão. Ele retorna 1 se não houver conexão e 0 se houver, então negamos sua saída. Dependendo da sua versão do netcat, ele pode suportar um ou ambos dos seguintes comandos:
while ! nc -z localhost 13000 </dev/null; do sleep 10; done
while ! nc -q 1 localhost 13000 </dev/null; do sleep 10; done
Uma abordagem alternativa é esperar que o processo do servidor abra um soquete de escuta.
while netstat -lnt | awk '$4 ~ /:13000$/ {exit 1}'; do sleep 10; done
Ou talvez você queira segmentar um ID de processo específico:
while ! lsof -n -Fn -p $pid | grep -q '^n.*:13000$'; do sleep 10; done
Não consigo pensar em nenhuma maneira de reagir ao processo que começa a escutar o soquete (o que evitaria uma abordagem de pesquisa) com o uso de ptrace
.