Recherche sur le site Web

Comment tuer le processus basé sur le numéro de port dans Linux


À tout moment, votre système Linux exécute simultanément plusieurs processus. Certains de ces processus ont accès à votre réseau s'ils sont utilisés pour télécharger ou télécharger des données. Ces processus se lient généralement à un numéro de port particulier, ce qui peut nous permettre de tuer le processus en fonction d'un numéro de port.

La commande kill est une façon dont les administrateurs système peuvent empêcher un processus d'exécuter. Cependant, la commande kill accepte uniquement un ID de processus comme argument. Les commandes pkill et killall sont deux autres options, mais celles-ci acceptent les noms de processus comme des arguments.

Afin de tuer un processus en fonction de son numéro de port, nous devrons utiliser la commande fuuser , ou utiliser d'autres outils de ligne de commande conjointement avec la commande tuer habituelle . Dans ce tutoriel, nous vous montrerons plusieurs façons de tuer un processus en fonction de son numéro de port dans Linux.

Dans ce tutoriel, vous apprendrez:

  • Comment tuer un processus sur un port TCP ou UDP avec Fuser
  • Comment tuer un processus sur un port SCTP avec tuer
  • Comment afficher le processus qu'un port utilise avec ss et lsof
  • Comment lier un processus à un port à l'aide de socat à des fins de test

Comment afficher quel processus utilise un certain port

Comme mentionné précédemment, un processus d'écoute pour les connexions entrants va se lier à un port. La plupart des processus utiliseront toujours le même port, sauf s'ils ont été configurés pour en utiliser un non-défaut. Par exemple, SSH utilise le port 22, HTTP utilise le port 80 et MySQL utilise le port 3306, etc. Avec ces connaissances, nous sommes en mesure de déterminer sur quel port un service fonctionne.

Commande LSOF

Pour voir une liste des ports utilisés sur notre système, la commande lsof est utile. Par exemple, la commande suivante répertorie les informations sur les processus ou les processus utilisent le port TCP 80.


sudo lsof -i TCP:80

Avec d'autres informations, la commande lsof nous donne l'ID de processus des processus en utilisant le port spécifié. Il fonctionnera également sur les ports UDP. Pour voir plus d'informations sur la façon d'utiliser LSOF, consultez notre tutoriel sur la commande Guide de LSOF Linux avec des exemples.

Commande SS

Une autre commande qui peut être utilisée pour voir quels processus utilisent un port particulier est la commande ss . Certains utilisateurs peuvent le préférer à lsof , mais personnellement, nous trouvons lsof un peu plus facile à utiliser pour cette situation. Cependant, ss est en mesure d'énumérer des processus qui utilisent d'autres protocoles, tels que les ports SCTP.


ss -Slp

La sortie de la commande ci-dessus affichera tous les processus et ports utilisés avec SCTP. Pour voir plus d'informations sur la façon d'utiliser SS, consultez notre tutoriel sur la commande SS sur Linux.

L'utilisation de ces deux outils nous aidera à déterminer quel ID de processus est en cours d'exécution sur un certain port, et sera également utile pour transmettre ces ID de processus à la commande kill dans certains des exemples suivants.

Lier un processus à un port avec socat

Afin de faciliter le test des commandes ci-dessous, nous pouvons utiliser la commande socat pour créer un processus factice qui se lie à un port de notre choix.

  1. Lier un processus au port TCP 8080:

    
    socat tcp-listen:8080,bind=127.0.0.1 stdout &
    
  2. Lier un processus au port UDP 8080:

    
    socat udp-listen:8080,bind=127.0.0.1 stdout &
    
  3. Lier un processus au port SCTP 8080:

    
    socat sctp-listen:8080,bind=127.0.0.1 stdout &
    

Ces exemples mettront votre processus en arrière-plan. Ensuite, nous pouvons utiliser les commandes ci-dessous pour tester la fin des processus.

Tuer le processus basé sur les exemples de numéro de port

  1. Pour les processus d'écoute sur un port TCP ou UDP, la commande Fuser ainsi que l'option -k (Kill) terminera les processus connexes pour vous. Spécifiez simplement le type de port (TCP ou UDP) et le numéro de port de votre commande. Par exemple, cela mettrait fin aux processus en utilisant le port TCP 80.

    
    fuser -k 8080/tcp
    
  2. Ou pour tuer un processus sur le port UDP 8080 avec fuuser :

    
    fuser -k 8080/udp
    

    N'oubliez pas d'utiliser la commande lsof par la suite pour confirmer qu'aucun processus n'utilise le port.

  3. Si vous ne souhaitez pas utiliser fuuser , il est possible de trouver les ID de processus qui utilisent un numéro de port via la commande lsof , puis passez ces données à la Commande Kill . Par exemple, cela mettra fin à tous les processus à l'aide du port TCP 8080.

    
    lsof -i tcp:8080 | awk '/8080/{print $2}' | xargs kill
    
  4. Pour terminer un processus à l'aide d'un protocole différent tel que SCTP, nous pouvons utiliser la commande ss et tuyau la commande PID TO xargs et tuer . Pour Exampe, la commande suivante tuerait tous les processus à l'aide du port SCTP 8080.

    
    ss -Slp | grep -Po ':8080\s.*pid=\K\d+(?=,)' | xargs kill
    

Réflexions de clôture

Dans ce tutoriel, nous avons vu comment tuer un processus en fonction du numéro de port qu'il utilise sur un système Linux. La commande fuuser est l'outil principal que nous utiliserions pour ce travail, mais Linux est connu pour offrir aux utilisateurs plus d'une méthode pour accomplir une tâche. En tant qu'alternatives, les commandes lsof et ss aident-nous à déterminer les informations dont nous avons besoin, et en collaboration avec la commande kill peut donner le même effet que fusion .

Articles connexes: