Redhat Linux 6.x를 사용하고 있으며 최근 Redhat 7로 업그레이드했습니다. 이전에는 다음 명령을 사용하여 Linux 세션을 종료했습니다. 하지만 이제 여러 세션을 종료하려고 하면 다음 오류가 발생합니다.
$ skill -kill pts/1 pts/0 pts/3
Memory fault
매뉴얼 페이지에 따르면 나도 시도해 보았으나 역시 작동하지 않았습니다.
skill -KILL -t /dev/pts/*
Kill users on PTY devices.
Redhat 7에서 세션을 종료해야 합니다.
답변1
사용자가 SSH를 통해 연결하는 경우 가능한 대답은 다음과 같습니다.
pkill -f <myusername>@pts/1
다른 경우:
who -u
end 그런 다음 pid를 종료하거나 예를 들어 루트를 제외한 모든 사용자 세션을 종료합니다.
$ who -u | awk '!/^root /{print $6}' |xargs sudo kill
답변2
눈치채다기술매뉴얼 페이지에는 다음과 같이 나와 있습니다.
이러한 도구는 오래되고 이식성이 없을 수 있습니다. 명령 구문이 잘 정의되어 있지 않습니다. 대신 killall, pkill 및 pgrep 명령을 사용해 보십시오.
나는 당신이 찾고있는 구문이 다음과 같다고 생각합니다.
skill -t pts/0 -t pts/1 -t pts/3
expression
...신택스는 플래그당 하나의 tty가 필요한 것 같습니다 -t
.
스킬이 실제로 프로세스를 종료하지 않은 이유에 대해서는 스킬이 컴파일된 이후 /proc/PID/stat의 형식이 변경되어 프로세스를 건너뛰는 것으로 의심됩니다.check_proc 함수(내가 찾은 Skill.c의 github 사본에서) /proc/PID/stat를 수동으로 구문 분석하고 프로세스에 종료 신호를 보내지 않는 것 같습니다.
open("/proc/21102/stat", O_RDONLY) = 4
read(4, "21102 (bash) S 21101 21102 21102"..., 128) = 128
...
open("/proc/22839/stat", O_RDONLY) = 4
read(4, "22839 (view) S 21102 22839 21102"..., 128) = 128
스킬의 새 복사본을 컴파일하면 예상대로 실행됩니다.
open("/proc/22926/stat", O_RDONLY) = 4
read(4, "22926 (bash) S 22925 22926 22926"..., 128) = 128
readlink("/proc/22926/tty", 0x7f3e47e073e0, 127) = -1 ENOENT (No such file or directory)
readlink("/proc/22926/fd/2", "/dev/pts/2", 127) = 10
kill(22926, SIGKILL) = 0
나는 맨 페이지 조언을 따르고토니옥pkill
예를 들어 pts/1 및/또는 pts/2에서 프로세스를 종료하려면 ; 로 전환합니다 .
pkill -HUP -t pts/1,pts/2