cmdsubst>là dấu nhắc thứ cấp được in bởi zshshell 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) để killlmở 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
-ttùy chọn lsof:lsof -ti:8080 | tail -n2
kill -9là 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 pstriển khai hỗ trợ lstartcộ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)
killlkhông?