cmdsubst>adalah prompt sekunder yang dicetak oleh zshshell 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 killlyang memperluas ke sesuatu yang berisi $(...)substitusi perintah yang tidak ditentukan , seperti:
$ alias 'killl=echo $(lsof -ti'
$ killl :22
cmdsubst>
Di mana zshmeminta Anda untuk menutup $(...)substitusi perintah itu.
Beberapa catatan lagi:
- output
lsofdiurutkan 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
-topsi lsof:lsof -ti:8080 | tail -n2
kill -9adalah 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 psimplementasi yang mendukung lstartkolom (seperti macOS 'dan procps-ng, meskipun kode harus diperbarui untuk procps-ng di mana bidang bulan dan hari ditukar)).
killl?