Bonsoir.
Bien sur, tout processus dispose d'un id(soit pid), et il est possible de le tuer en trouvant le nom de ton processus fantôme.
ps aux | grep -i "ton_serveur"
ps affiche la liste des processus, et "aux" sont ses arguments.
| est un pipe qui envoie les résultat à la commande suivante
grep -i "ton_serveur" va matcher/garder les ligne qui contiennent "ton_serveur" sans respecter la casse.
Au final soit tu as la ligne direct de ton processus avec son pid, que tu peux tuer :
kill "pid trouvé"
Sinon tu peux le tuer avec son nom directement :
killall "ton_serveur"
Au pire tu le tue grâce au chemin de ton binaire :
fuser -k /chemin/vers/serveur
Tu peux afficher la liste des connections actives grâce à netstat, ca te permettra de voir si il y a encore des connections.
netstat -antu
(paquets tcp et udp affichés)
Je te laisse le soin de rechercher à quoi correspondre précisemment ces commandes, et de trouver un petit guide de survie sous linux.
Finalement je dirais que ton application est mal concu, vérifie le multithread, essayes de mettre en place des exceptions handling, et debug le au pire, gdb, ptrace, objdump...
Bye.