Jul 14, 2020
Lo leggi in 2 minuti
Iniziamo ad usare la shell di comandi Linux/Ubuntu per gestire le installazioni di Domotica più evolute. Useremo Ubuntu per applicazioni complesse che non potrebbero mai girare su una semplice scheda Arduino...
In questo post impareremo a usare fuser nel terminale di Linux.
Ammesso che non siate già appassionati di Ubuntu o Fedora o altre “distro” Linux voglio iniziare con una serie di brevi articoli per risolvere alcuni piccoli ma noiosi problemi che rallentano il lavoro di programmazione. Tra i tanti, secondo me il più comune è Port already used (Porta già occupata) che appare quande lanciate un server Python/Django o NodeJs.
Detto in modo facile, avete lanciato e dimenticato un programma che sta bloccando proprio la porta che vi serve. Ad esempio la porta 3000 di Nodejs o la 8000 di Python/Django.
Potremmo lanciare il comando ps -ea per andare a spulciare tra tutti i programmi in esecuzione ma perderemmo troppo tempo. Scriviamo invece sul PROMPT di Linux (che si chiama SHELL) il comando seguente e otterremo in un instante il PID del programma:
fuser -i :3000
fuser -i :8000
Riceveremo un messaggio del tipo:
e da questo siamo in grado di capire che un server node sta girando in sottofondo (come demon) con un PID = 16176.
Per bloccarlo ci basta scrivere:
kill -9 16176 (o qualunque numero sia il PID)
facendo come sempre attenzione agli spazi.
In alternativa puoi usare invece netstat insieme a grep per cercare il programma che occupa la porte 80 o 3000 o 8000.
sudo netstat -ltnp | grep 80
sudo netstat -ltnp | grep 3000
sudo netstat -ltnp | grep 8000
Dopo avere ottenuto il messaggio:
possiamo procedere con il solito comando kill -9 PID per “stoppare” il programma che ci dà fastidio.
Ti interessa questo articolo e vuoi scoprire a costo zero tutti i segreti della elettronica digitale?
Iscriviti ora alla nostra newsletter e dopo avere confermato la tua iscrizione troverai ogni 15 gg nella tua mail un argomento o un progetto pratico da seguire, con la lista dei componenti e il software necessario.