cmdsubst>
adalah prompt sekunder yang dicetak oleh zsh
shell ketika menunggu akhir dari substitusi perintah yang dimasukkan.
Jika Anda mendapatkan prompt itu setelah hanya memasukkan killl<Return>
, maka satu-satunya penjelasan yang masuk akal adalah bahwa Anda memiliki alias (yang merupakan beberapa bentuk ekspansi makro string) untuk killl
yang memperluas ke sesuatu yang berisi $(...)
substitusi perintah yang tidak ditentukan , seperti:
$ alias 'killl=echo $(lsof -ti'
$ killl :22
cmdsubst>
Di mana zsh
meminta Anda untuk menutup $(...)
substitusi perintah itu.
Beberapa catatan lagi:
- output
lsof
diurutkan berdasarkan pid. nomor pid dibungkus, pid yang lebih besar bukan jaminan bahwa proses itu dimulai nanti.
-i:8080
akan melaporkan soket TCP atau UDP yang memiliki port 8080 sebagai port sumber atau tujuan, baik itu soket yang mendengarkan, menerima, atau menghubungkan.
- Jika Anda ingin mendapatkan pid saja, Anda dapat menggunakan
-t
opsi lsof
:lsof -ti:8080 | tail -n2
kill -9
adalah kill -s KILL
, yang mengirimkan sinyal bahwa aplikasi tidak dapat bertindak untuk keluar dengan anggun. Seharusnya hanya digunakan sebagai pilihan terakhir.
Untuk membunuh proses yang paling baru dimulai yang memiliki soket terikat (di kedua ujungnya) pada port 8080, Anda dapat melakukan:
#! /bin/sh -
unset IFS
pids=$(lsof -ti:8080) &&
LC_ALL=C ps -o pid=,lstart= -p $pids |
LC_ALL=C sort -k6,6n -k4,4M -k3,3n -k5,5 -k1,1n |
awk 'END{system("kill " $1)}'
(mengasumsikan GNU sort
(seperti yang ditemukan pada macOS) dan ps
implementasi yang mendukung lstart
kolom (seperti macOS 'dan procps-ng, meskipun kode harus diperbarui untuk procps-ng di mana bidang bulan dan hari ditukar)).
killl
?