Forever Learner Asked: 2018-02-22 03:44:26 +0800 CST2018-02-22 03:44:26 +0800 CST 2018-02-22 03:44:26 +0800 CST 技能无法杀死 Redhat 7 中的会话 772 我有最近升级到 Redhat 7 的 Redhat Linux 6.x。以前我曾经使用以下命令来终止 linux 会话。但是现在如果我尝试终止多个会话,我会收到以下错误。 $ skill -kill pts/1 pts/0 pts/3 Memory fault 根据手册页,我也尝试过,但这也没有用。 skill -KILL -t /dev/pts/* Kill users on PTY devices. 我需要终止 Redhat 7 中的会话。 rhel process 2 个回答 Voted Best Answer tonioc 2018-02-22T04:58:41+08:002018-02-22T04:58:41+08:00 如果用户通过 ssh 连接,一种可能的答案是: pkill -f <myusername>@pts/1 对于其他情况: who -u end 然后杀死 pid(s),或者例如杀死除 root 用户会话之外的所有用户会话: $ who -u | awk '!/^root /{print $6}' |xargs sudo kill Jeff Schaller 2018-02-22T08:20:38+08:002018-02-22T08:20:38+08:00 注意到技能的手册页说: 这些工具可能已经过时且不可移植。命令语法定义不明确。考虑改用 killall、pkill 和 pgrep 命令 我相信您正在寻找的语法是: skill -t pts/0 -t pts/1 -t pts/3 ...因为expression语法似乎每个-t标志需要一个 tty。 至于为什么技能实际上没有杀死进程,我怀疑 /proc/PID/stat 的格式在技能编译后发生了变化,导致它跳过了check_proc 函数中的进程(在技能的任意 github 副本中)。 c 我发现)。它似乎手动解析 /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 我会按照手册页和tonioc的建议切换到pkill; 例如,要杀死 pts/1 和/或 pts/2 上的进程: pkill -HUP -t pts/1,pts/2
如果用户通过 ssh 连接,一种可能的答案是:
对于其他情况:
end 然后杀死 pid(s),或者例如杀死除 root 用户会话之外的所有用户会话:
注意到技能的手册页说:
我相信您正在寻找的语法是:
...因为
expression
语法似乎每个-t
标志需要一个 tty。至于为什么技能实际上没有杀死进程,我怀疑 /proc/PID/stat 的格式在技能编译后发生了变化,导致它跳过了check_proc 函数中的进程(在技能的任意 github 副本中)。 c 我发现)。它似乎手动解析 /proc/PID/stat ,并且从不向进程发送终止信号:
...
当我编译一个新的技能副本时,它会按预期运行:
我会按照手册页和tonioc的建议切换到
pkill
; 例如,要杀死 pts/1 和/或 pts/2 上的进程: