cmdsubst>zshgirilen bir komut değişikliğinin sonunu beklerken kabuk tarafından yazdırılan ikincil bilgi istemidir .
Sadece girildikten sonra bu istemi alırsanız killl<Return>, o zaman makul olan tek açıklama, bunun gibi killlsonlandırılmamış bir $(...)komut ikamesi içeren bir şeye genişleyen bir takma adınızın (dize makrosu genişletmesinin bir şeklidir) olmasıdır :
$ alias 'killl=echo $(lsof -ti'
$ killl :22
cmdsubst>
zshBu $(...)komut değişikliğini kapatmanı nerede istiyor?
Birkaç not daha:
- çıktısı
lsofpid'e göre sıralanır. pid numaraları sarılır, daha büyük bir pid, işlemin daha sonra başlatıldığını garanti etmez.
-i:8080 8080 bağlantı noktasına sahip TCP veya UDP yuvalarını, ister dinleme, kabul etme veya bağlantı soketi olsun, kaynak veya hedef bağlantı noktası olarak bildirir.
- Yalnızca pid'i almak istiyorsanız, aşağıdaki
-tseçeneği kullanabilirsiniz lsof:lsof -ti:8080 | tail -n2
kill -9bir kill -s KILLuygulama incelikle çıkış üzerine hareket edemez bir sinyal gönderir. Sadece son çare olarak kullanılmalıdır.
8080 numaralı bağlantı noktasında bir sokete bağlı (her iki uçta) en son başlatılan işlemi öldürmek için şunları yapabilirsiniz:
#! /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)}'
(GNU'yu sort( macOS'ta olduğu gibi ) ve sütunu psdestekleyen bir uygulamayı varsayar ( lstartmacOS ve procps-ng'ler gibi, ancak ay ve gün alanlarının değiştirildiği procps-ng için kodun güncellenmesi gerekir).
killlmı?