cmdsubst>
zsh
girilen 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 killl
sonlandı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>
zsh
Bu $(...)
komut değişikliğini kapatmanı nerede istiyor?
Birkaç not daha:
- çıktısı
lsof
pid'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
-t
seçeneği kullanabilirsiniz lsof
:lsof -ti:8080 | tail -n2
kill -9
bir kill -s KILL
uygulama 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 ps
destekleyen bir uygulamayı varsayar ( lstart
macOS 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).
killl
mı?