htop을 사용하면 쉘 내의 프로세스 트리를 멋지게 볼 수 있습니다. 을 누른 F9 (KILL)
다음 종료 15 SIGTERM
할 작업으로 보낼 신호 (예 :)를 선택하여 프로세스를 종료 할 수 있습니다 .
그러나 이것은 한 번에 하나의 프로세스 만 죽일 수 있습니다. 를 사용하여 전체 프로세스 트리를 종료하는 방법이 htop
있습니까?
htop을 사용하면 쉘 내의 프로세스 트리를 멋지게 볼 수 있습니다. 을 누른 F9 (KILL)
다음 종료 15 SIGTERM
할 작업으로 보낼 신호 (예 :)를 선택하여 프로세스를 종료 할 수 있습니다 .
그러나 이것은 한 번에 하나의 프로세스 만 죽일 수 있습니다. 를 사용하여 전체 프로세스 트리를 종료하는 방법이 htop
있습니까?
답변:
보낸 사람 man htop
:
대화 형 명령
스페이스 태그 지정 또는 프로세스 태그 해제 "kill"과 같은 여러 프로세스에서 작동 할 수있는 명령 은 현재 강조 표시된 프로세스 대신 태그가 지정된 프로세스 목록에 적용됩니다 .
U 모든 프로세스의 태그를 해제합니다 (Space 키로 추가 된 모든 태그 제거).
F9, k "Kill"process : 메뉴에서 선택된 신호를 하나 또는 여러 프로세스 그룹으로 보냅니다. 프로세스에 태그가 지정된 경우, 태그가 지정된 모든 프로세스에 신호를 보냅니다. 태그가 없으면 현재 선택된 프로세스로 보냅니다.
당신이 찾고있는 대답은 아니지만 가깝습니다. 프로세스 그룹 또는 강제 종료 된 자식을 제거 할 수도 있습니다.
htop 맨 페이지에서 :
F5, t 트리보기 : 부모 단위로 프로세스를 구성하고 이들 간의 관계를 트리로 레이아웃합니다. 키를 전환하면 트리와 이전에 선택한 정렬 뷰간에 전환됩니다. 정렬보기를 선택하면 트리보기가 종료됩니다.
F5를 누르고 't'를 쳐야 할 수도 있습니다. 그러면 전체 트리를 죽일 수 있습니다.
님 htop
의 s
명령을 납치 할 수 있습니다. 에서이 htop
키를 누르면 s
발동 할을 strace -p <the-pid-of-the-selected-process>
.
그런 다음 할 수있는 일은 strace
다음과 같은 내용을 포함 하는 명령을 만드는 것입니다.
#! /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
그리고 같은 디렉토리에 배치하고 다음과 같이 ~/.htop-hijack
htop을 호출하십시오.
PATH=~/.htop-hijack:$PATH htop
그런 다음을 누르면 s
대신 해당 명령이 호출됩니다 strace
(나중에 기본 화면으로 돌아가려면 Esc를 눌러야 함).
오랫동안이 기능이 있었지만 2018 년까지는 매뉴얼에서 누락되었습니다. c
키를 눌러 현재 강조 표시된 프로세스와 모든 하위 프로세스를 선택하십시오. 그런 다음 선택한 프로세스에 적용되는 작업 (예 : k
키를 사용한 종료 )이 프로세스 및 해당 자식에 적용됩니다.
그러나 이것은 원자 적이 지 않습니다. 만약 당신이 누르는 c
순간과 커널이 모든 프로세스를 죽인 순간 사이에 새로운 자식들이 생성된다면 , 그것들은 죽이지 않을 것이며 대부분 init 프로세스에 다시 연결될 것입니다. 선택한 프로세스에서 htop이 루핑되어 하나씩 종료되기 때문입니다.
나는 한 패치 제안 얼마 전에 htop하는 원자 그룹을 죽이는 기능을 추가 할을하지만, 구현은 병합하기위한 합의 충분하지 않았다. 그것으로, htop에서 전체 프로세스 그룹을 원자 적으로 죽일 수 있습니다. 그것은 전체 트리를 죽이는 것과 정확히 동일하지는 않지만 AFAIK는 커널이 임의의 트리를 원자 적으로 죽이는 방법을 제공하지 않습니다.