cmdsubst>
là dấu nhắc thứ cấp được in bởi zsh
shell khi nó chờ kết thúc lệnh thay thế được nhập.
Nếu bạn nhận được lời nhắc đó sau khi vừa nhập killl<Return>
, thì lời giải thích hợp lý duy nhất là bạn có một bí danh (là một dạng mở rộng macro chuỗi) để killl
mở rộng thành thứ có chứa $(...)
thay thế lệnh bị lỗi, như:
$ alias 'killl=echo $(lsof -ti'
$ killl :22
cmdsubst>
Trường hợp zsh
đang yêu cầu bạn đóng $(...)
lệnh thay thế đó.
Một vài lưu ý nữa:
- đầu ra của
lsof
được sắp xếp theo pid. số pid được bọc, một pid lớn hơn không đảm bảo rằng quá trình được bắt đầu sau đó.
-i:8080
sẽ báo cáo các ổ cắm TCP hoặc UDP có cổng 8080 làm cổng nguồn hoặc cổng đích, cho dù đó là ổ cắm nghe, chấp nhận hoặc kết nối.
- Nếu bạn chỉ muốn lấy pid, bạn có thể sử dụng
-t
tùy chọn lsof
:lsof -ti:8080 | tail -n2
kill -9
là kill -s KILL
, sẽ gửi một tín hiệu rằng ứng dụng không thể hành động để thoát ra một cách duyên dáng. Nó chỉ nên được sử dụng như là một phương sách cuối cùng.
Để loại bỏ quá trình bắt đầu gần đây nhất có ràng buộc ổ cắm (một trong hai) trên cổng 8080, bạn có thể làm:
#! /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)}'
(giả sử GNU sort
(như được tìm thấy trên macOS) và một ps
triển khai hỗ trợ lstart
cột (như macOS 'và Procps-ng, mặc dù mã sẽ phải được cập nhật cho Procps-ng trong đó các trường tháng và ngày được hoán đổi)
killl
không?