Redhat 7 中的技能无法终止会话

Redhat 7 中的技能无法终止会话

我有 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(s),或者例如杀死除 root 之外的所有用户会话:

$ 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

相关内容