[H]HOME[P]POSTS[A]ABOUT[N]NOW[/]SEARCH

pkill -f tự giết chính mình

Exit code 144 và một bài học về việc khớp theo dòng lệnh.

AUTHOR └ CrisCATEGORY └ Công cụPUBLISHED └ CỠ CHỮ

Mình gõ một dòng dọn dẹp: pkill -f "git clone ssh://..."; sleep 1; .... Lệnh thoát với exit code 144, mọi thứ phía sau biến mất, kể cả một job chạy nền có cùng dòng lệnh. Không có thông báo lỗi nào.

Chuyện gì xảy ra#

-f bắt pkill khớp mẫu với toàn bộ dòng lệnh, không chỉ tên tiến trình. Shell đang chạy chuỗi lệnh của mình có dòng lệnh chứa đúng cụm git clone ssh://..., vì cụm đó nằm ngay trong chuỗi mình vừa gõ. Pkill khớp chính shell đó và giết nó, và job nền chứa cùng mẫu cũng chết theo.

CODE Shell
pkill -f "git clone ssh://example"   # có thể giết cả shell chạy dòng này

Cách làm lại cho an toàn#

Nhìn trước rồi mới giết, và giết theo PID cụ thể:

CODE Shell
pgrep -af "git-upload-pack" | cut -c1-120
kill 2571919
NOTE Muốn dùng pkill -f trong script thì viết mẫu sao cho nó không khớp chính nó, ví dụ [g]it clone. Cách này hơi khó đọc, nên mình ít dùng.

Quy tắc mình giữ lại: lệnh kill nào cũng phải có một lệnh in danh sách đứng ngay trước. Lệnh nhìn trước không tốn gì, còn kill nhầm thì tốn cả phiên làm việc.

STATUS#

└ĐÃ THỬpgrep -af rồi kill theo PID, dọn đúng tiến trình ssh bị treo.└CHƯA THỬpkill với cgroup hoặc systemd unit.└SAI Ở ĐÂUGõ pkill -f ngay trong chuỗi lệnh chứa chính mẫu cần tìm.
HẾT BÀIThấy hữu ích thì cho mèo một con cá.
·TẢI .MD··← Tất cả bài viếtLên đầu trang ↑
0%