Alternatif yang lebih cepat daripada lsof

8

Saya ingin mengekstrak id proses dari proses tertentu untuk mematikannya. Prosesnya adalah server web lokal menggunakan port tertentu (localhost: 3000), dan saat ini saya melakukannya seperti ini untuk mengekstrak baris yang relevan:

lsof|grep localhost:3000

tapi lsofperintahnya terlalu lambat. Apakah ada cara yang lebih cepat untuk mengekstrak id proses?

sawa
sumber
lsof -idaftar hanya koneksi jaringan.
Hanan N.
@HananN. Saya mencobanya, tetapi masih sangat lambat. Menggunakan netstat seperti yang disarankan dalam jawaban jauh lebih cepat.
sawa
2
lsofbukan bagian yang lambat, menggunakan semua resolusi nama dan penyelesaian ip. Buat semuanya numerik dan akan berjalan cepat.
Marcin
@ Marsin Informasi Anda sebenarnya sangat membantu sebanyak jawaban yang diberikan. Terima kasih.
sawa
Apakah ada alasan mengapa Anda bisa t use membunuh semua pgrepatau pkill?
Nils

Jawaban:

7

Coba netstat, saya tidak bisa mengatakan apakah lebih cepat atau lebih lambat.

netstat -tanp | awk '$4 ~ /:8443$/ {sub(/\/.*/, "", $7); print $7}' | sort -u
Nikhil Mulley
sumber
1
Saya mengerti untuk menggunakan opsi -p, Linux mengharuskan Anda untuk menjadi pengguna root.
Nikhil Mulley
1
Ini pasti lebih cepat karena netstat hanya mencantumkan koneksi jaringan (dan tidak semua file yang terbuka)
Matteo
Terima kasih atas respons yang cepat dan akurat. Saya banyak membantu saya.
sawa
11

Anda dapat menempatkan opsi -n ke lsof dan kemudian menghapus resolusi DNS, yang dapat mempercepat tampilan

Dom
sumber
Ya, itu tampaknya memecahkan masalah, dan sangat membantu. Itu sebagian disarankan oleh Marcin dalam komentar atas jawaban saya.
sawa
1
waktu dilaporkan lsof mengambil 10 detik terlepas dari opsi n.
user1133275
2
sudo ss -p -l '( sport = :3000 )'|awk -F"," 'NR!=1{print $2}'

Ini akan mencetak PID dari proses mendengarkan pada 3000

time melaporkan bahwa ini selesai dalam 0m0.018s.

Jodie C
sumber