Des alternatives plus rapides à lsof

8

Je veux extraire l'ID de processus d'un certain processus afin de l'arrêter. Le processus est un serveur Web local utilisant un certain port (localhost: 3000), et je le fais actuellement comme ceci pour extraire la ligne appropriée:

lsof|grep localhost:3000

mais la lsofcommande est trop lente. Existe-t-il un moyen plus rapide d'extraire l'ID de processus?

sawa
la source
lsof -iliste uniquement les connexions réseau.
Hanan N.
@HananN. Je l'ai essayé, mais c'est encore très lent. L'utilisation de netstat comme suggéré dans les réponses est beaucoup plus rapide.
sawa
2
lsofn'est pas la partie lente, en utilisant toutes les résolutions de nom et la résolution ip. Rendez tout numérique et ça ira vite.
Marcin
@Marcin Vos informations ont été utiles autant que les réponses données. Je vous remercie.
sawa
Y a-t-il une raison pour laquelle vous pouvez t use tuer tous pgrepou pkill?
Nils

Réponses:

7

Essayez netstat, je ne peux pas dire si c'est plus rapide ou plus lent, cependant.

netstat -tanp | awk '$4 ~ /:8443$/ {sub(/\/.*/, "", $7); print $7}' | sort -u
Nikhil Mulley
la source
1
Je comprends que pour utiliser l'option -p, Linux nécessite que vous soyez root.
Nikhil Mulley
1
C'est nettement plus rapide car netstat ne répertorie que les connexions réseau (et pas tous les fichiers ouverts)
Matteo
Merci pour la réponse rapide et précise. Je m’ai beaucoup aidé.
sawa
11

Vous pouvez mettre une option -n sur lsof puis supprimer la résolution DNS, ce qui peut accélérer l'affichage

Dom
la source
Oui, cela semble aggraver le problème et c'est utile. Cela a été en partie suggéré par Marcin dans un commentaire à ma réponse.
sawa
1
temps rapporté lsof prenant 10 secondes quelle que soit l'option n.
user1133275
2
sudo ss -p -l '( sport = :3000 )'|awk -F"," 'NR!=1{print $2}'

Cela imprimera le PID du processus d'écoute sur 3000

time rapporte que cela s'est terminé en 0m0.018s.

Jodie C
la source