Giết một cây các quá trình trong top / htop


12

htop cho phép tôi nhìn thấy cây quy trình độc đáo trong vỏ. Tôi có thể giết các tiến trình bằng cách nhấn F9 (KILL)và sau đó chọn tín hiệu nào (ví dụ 15 SIGTERM) tôi muốn gửi đến một công việc để giết.

Tuy nhiên, điều này chỉ cho phép tôi giết một quá trình tại một thời điểm. Có cách nào để tiêu diệt toàn bộ quá trình sử dụng htopkhông?

Câu trả lời:


16

Từ man htop:

THÔNG TIN TƯƠNG TÁC

Thẻ không gian hoặc gỡ bỏ một quá trình. Các lệnh có thể hoạt động trên nhiều quy trình, như "giết", sau đó sẽ áp dụng trên danh sách các quy trình được gắn thẻ , thay vì các quy trình hiện được tô sáng.

U Bỏ qua tất cả các quy trình (xóa tất cả các thẻ được thêm bằng phím Space).

Quá trình F9, k "Kill": gửi tín hiệu được chọn trong menu tới một hoặc một nhóm các quy trình. Nếu các quy trình được gắn thẻ, gửi tín hiệu đến tất cả các quy trình được gắn thẻ. Nếu không được gắn thẻ, gửi đến quy trình hiện được chọn.

Không hoàn toàn câu trả lời bạn đang tìm kiếm, nhưng gần gũi. Bạn cũng có thể loại bỏ các nhóm quy trình hoặc trẻ em bị giết, xem:

/programming/392022/best-way-to-kill-all-child- Processes


1

Từ trang chủ htop:

F5, t Chế độ xem dạng cây: tổ chức các quy trình theo cách làm cha mẹ và bố trí các mối quan hệ giữa chúng dưới dạng cây. Nhấn phím sẽ chuyển giữa cây và dạng xem sắp xếp đã chọn trước đó của bạn. Chọn chế độ xem sắp xếp sẽ thoát khỏi chế độ xem dạng cây.

Vì vậy, nhấn F5 và sau đó bạn có thể phải nhấn 't'. Điều đó sẽ cho phép bạn giết toàn bộ cây.


1
Điều này sẽ chỉ hoạt động nếu "cây" chắc chắn bị ràng buộc với cha mẹ của nó; lưu ý rằng htop hiển thị các nhóm luồng dưới dạng cây (trong trường hợp đó, các nhánh không phải là quá trình thực). Nếu không, những đứa trẻ mồ côi sẽ được phát minh lại bởi init, vì vậy không bị giết.
goldilocks

Tôi hoàn toàn đồng ý, mặc dù điều này phụ thuộc hoàn toàn vào các quy trình liên quan. Giết một phiên cây ssh sẽ giết chết procs tiềm ẩn, ví dụ; OP không đặc biệt cụ thể về lý do tại sao anh ta muốn giết cả một cây.
Stephan

1

Bạn có thể chiếm quyền điều khiển htopcủa slệnh. Trong htop, nhấn scầu khẩn strace -p <the-pid-of-the-selected-process>.

Sau đó, những gì bạn có thể làm là tạo một stracelệnh có chứa một cái gì đó như:

#! /bin/sh -
pids=$(ps -eo pid= -o ppid= |
  awk -v exclude="$PPID" -v pid="$2" '
    function descends(p) {
      if (p == exclude) return 0
      if (p == pid) return 1
      if (p <= 1) return 0
      return descends(parent[p])
    }
    { parent[$1]=$2 }
    END {
      for (p in parent)
        if (descends(p))
         print p
    }'
)
if [ -z "$pids" ]; then
  echo >&2 "No process found to kill"
else
  echo >&2 Killing $pids
  kill $pids
fi

Và đặt nó trong một số thư mục như ~/.htop-hijack, và gọi htop là:

PATH=~/.htop-hijack:$PATH htop

Sau đó, nhấn ssẽ gọi lệnh đó thay vì strace(bạn cần nhấn Esc để quay lại màn hình chính sau đó).


1

Đã có một tính năng cho điều này trong một thời gian dài, nhưng nó đã bị thiếu trong hướng dẫn sử dụng cho đến năm 2018: nhấn cphím để chọn quy trình hiện được tô sáng cũng như tất cả các con của nó. Sau đó, các thao tác áp dụng cho các quy trình được chọn (chẳng hạn như sử dụng kkhóa) sẽ áp dụng cho quy trình và các phần tử con của nó.

Đây không phải là nguyên tử, mặc dù. Nếu những đứa trẻ mới được sinh ra giữa thời điểm bạn nhấn cvà khoảnh khắc hạt nhân đã giết tất cả các quy trình, chúng sẽ không bị giết và rất có thể cuối cùng sẽ được gắn lại vào quy trình init. Điều này là do htop đang lặp lại các quy trình được chọn và giết từng cái một.

Tôi đã đề xuất một bản vá để thêm một tính năng tiêu diệt nhóm nguyên tử vào thời điểm trước, nhưng việc thực hiện không đủ đồng thuận để nó được hợp nhất. Với nó, có thể giết chết cả một nhóm quá trình nguyên tử từ htop. Điều đó không hoàn toàn giống với việc giết cả một cây, nhưng AFAIK, hạt nhân không cung cấp bất kỳ cách nào để giết một cây tùy ý về mặt nguyên tử.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.