cmdsubst>
เป็นพรอมต์รองที่พิมพ์โดยzsh
เชลล์เมื่อรอการสิ้นสุดของการทดแทนคำสั่งที่ถูกป้อน
หากคุณได้รับพรอมต์นั้นหลังจากเพิ่งป้อนkilll<Return>
คำอธิบายที่สมเหตุสมผลเพียงอย่างเดียวคือคุณมีนามแฝง (ซึ่งเป็นรูปแบบหนึ่งของการขยายแมโครสตริง) สำหรับkilll
สิ่งนั้นจะขยายไปสู่บางสิ่งที่มีการ$(...)
ทดแทนคำสั่งที่ไม่ถูกทำลายเช่น:
$ alias 'killl=echo $(lsof -ti'
$ killl :22
cmdsubst>
การzsh
ขอให้คุณปิดการ$(...)
แทนที่คำสั่งนั้นอยู่ที่ไหน
หมายเหตุเพิ่มเติม:
- ผลลัพธ์ของ
lsof
ถูกเรียงลำดับตาม pid หมายเลข pid ถูกห่อไว้ pid ที่ใหญ่กว่านั้นไม่ได้รับประกันว่ากระบวนการจะเริ่มในภายหลัง
-i:8080
จะรายงานซ็อกเก็ต TCP หรือ UDP ที่มีพอร์ต 8080 เป็นพอร์ตต้นทางหรือพอร์ตปลายทางไม่ว่าจะเป็นซ็อกเก็ตการฟังการยอมรับหรือการเชื่อมต่อ
- หากคุณต้องการรับ pid เท่านั้นคุณสามารถใช้
-t
ตัวเลือกlsof
:lsof -ti:8080 | tail -n2
kill -9
คือkill -s KILL
ซึ่งจะส่งสัญญาณว่าแอปพลิเคชันไม่สามารถดำเนินการเพื่อออกอย่างสง่างาม มันควรจะใช้เป็นทางเลือกสุดท้าย
หากต้องการฆ่ากระบวนการที่เพิ่งเริ่มต้นซึ่งมีซ็อกเก็ตถูกผูกไว้ (ปลายทั้งสองด้าน) ที่พอร์ต 8080 คุณสามารถทำได้:
#! /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 sort
(เท่าที่พบใน macOS) และการps
ใช้งานที่สนับสนุนlstart
คอลัมน์ (เช่น macOS 'และ procps-ng ของแม้ว่ารหัสจะต้องมีการปรับปรุงสำหรับ procps-ng ที่มีการสลับฟิลด์เดือนและวัน))
killl
?