32

这是finger命令的结果(今天(星期一)当我(Vidya)登录时)

sekic1083 [6:14am] [/home/vidya] -> finger
Name        Tty       Idle   Login Time    Where
Felix   pts/0        -       Thu 10:06  sekic2594.rnd.ki.sw.
john        pts/1       2d       Fri 15:43
john        *pts/2      2d       Fri 15:43
john      *pts/3       4     Fri 15:44
john      *pts/7       -         Thu 16:25
Vidya      pts/0       -         Mon 06:14
Vidya     *pts/5       -         Mon 06:14
Vidya     *pts/6       -         Tue 10:13
Vidya     *pts/9       -         Wed 05:39
Vidya     *pts/10      -         Wed 10:23

在列下Tty pts/0 and pts/5是当前活动的终端。

除了这两个pts/6,pts/9并且pts/10也在场,我上周登录了这些。但是他们的空闲时间显示为“-”(不是空闲)。

我怎样才能杀死这些 6,9 和 10 终端?

4

10 回答 10

41

你可以运行:

ps -ft pts/6 -t pts/9 -t pts/10

这将产生类似于以下内容的输出:

UID        PID  PPID  C STIME TTY          TIME CMD
Vidya      772  2701  0 15:26 pts/6    00:00:00 bash
Vidya      773  2701  0 16:26 pts/9    00:00:00 bash
Vidya      774  2701  0 17:26 pts/10   00:00:00 bash

PID结果中获取。

使用 PID 杀死进程:

kill <PID1> <PID2> <PID3> ...

对于上面的例子:

kill 772 773 774

如果进程没有正常终止,作为最后一个选项,您可以通过发送一个强制终止SIGKILL

kill -9 <PID>
于 2013-03-04T06:08:10.767 回答
27

我和你有同样的问题,但我想杀死我所在的 gnome 终端。我阅读了关于“谁”的手册,发现你可以使用“-a”选项列出所有登录到计算机的会话,并且然后“-l”选项打印系统登录过程。

who -la

谁给了我什么 你应该得到这样的东西。然后你所要做的就是用'kill'命令杀死进程。

kill <PID>
于 2014-08-14T15:25:15.727 回答
23

例如杀死 pts/0

pkill -9 -t pts/0
于 2016-07-21T03:47:47.093 回答
11

尝试这个:

skill -KILL -v pts/6

skill -KILL -v pts/9

skill -KILL -v pts/10
于 2014-11-12T02:57:29.373 回答
1

我今天遇到了同样的问题。我没有剩余的进程,但是用户“xxx”的剩余手指条目,这阻止了我使用“userdel xxx”删除这个用户。

错误消息是:userdel:帐户“xxx”当前正在使用中。

它看起来像一个崩溃的终端会话。所以我重新启动,但问题仍然存在。

last xxx
xxx      pts/5        10.1.2.3     Fri Feb  7 10:25 - crash  (01:27)

所以我(重新)移动了 /var/run/utmp 文件:

mv /var/run/utmp /var/run/utmp.save ; touch /var/run/utmp

这清除了所有手指条目。不幸的是,这样即使当前正在运行的会话也会被清除。如果这对您来说是个问题,您必须在(重新)移动 utmp 文件后重新启动。

但是在我的情况下,这是解决方案。之后我能够使用“userdel xxx”成功删除用户。

于 2014-02-20T13:05:10.633 回答
1

您不需要知道 pts 编号,只需键入:

ps全部| 重击

然后:

杀死 pid1 pid2 pid3 ...

于 2016-03-25T19:51:19.503 回答
1

最简单的方法是使用pkill命令。在你的情况下:

pkill -9 -t pts/6
pkill -9 -t pts/9
pkill -9 -t pts/10

关于 tty 会话,以下命令总是有用的:

w- 显示活动的终端会话

tty- 显示您当前的终端会话(这样您就不会意外关闭它)

last | grep logged- 显示当前登录的用户

有时我们想关闭空闲用户的所有会话(即当连接突然丢失时)。

pkill -u username- 杀死“用户名”用户的所有会话。

有时当我们想要杀死除当前会话之外的所有会话时,我为它制作了一个脚本。有一些化妆品和一些交互性(避免意外运行脚本)。

#!/bin/bash
MYUSER=`whoami`
MYSESSION=`tty | cut -d"/" -f3-`
OTHERSESSIONS=`w $MYUSER | grep "^$MYUSER" | grep -v "$MYSESSION" | cut -d" " -f2`
printf "\e[33mCurrent session\e[0m: $MYUSER[$MYSESSION]\n"

if [[ ! -z $OTHERSESSIONS ]]; then
  printf "\e[33mOther sessions:\e[0m\n"
  w $MYUSER | egrep "LOGIN@|^$MYUSER" | grep -v "$MYSESSION" | column -t
  echo ----------
  read -p "Do you want to force close all your other sessions? [Y]Yes/[N]No: " answer
  answer=`echo $answer | tr A-Z a-z`
  confirm=("y" "yes")

  if [[ "${confirm[@]}" =~ "$answer" ]]; then
  for SESSION in $OTHERSESSIONS
    do
         pkill -9 -t $SESSION
         echo Session $SESSION closed.
    done
  fi
else
        echo "There are no other sessions for the user '$MYUSER'".
fi
于 2019-01-08T20:00:02.413 回答
0

您也可以使用 killall 命令。

-o, --older-than 仅匹配指定时间之前(开始于)的进程。时间指定为浮点数,然后是单位。单位是 s,m,h,d,w,M,y 代表秒、分钟、小时、天、

-e, --exact 要求非常长的名称完全匹配。

-r, --regexp 将进程名称模式解释为扩展的正则表达式。

这就像一个魅力。

于 2015-02-20T11:03:12.813 回答
0

如果你想为特定用户关闭所有进程的 tty,上面的命令是最简单的。您可以使用:

killall -u user_name
于 2015-09-26T11:15:22.203 回答
-2

除了AIXroot的回答,还有一个注销功能,可以用来写 utmp 注销记录。所以如果你没有用户xxxx的任何进程,但是userdel说“userdel: account xxxx is current in use”,你可以手动添加注销记录。像这样创建一个文件 logout.c:

#include <stdio.h>
#include <utmp.h>

int main(int argc, char *argv[])
{
  if (argc == 2) {
    return logout(argv[1]);
  }
  else {
    fprintf(stderr, "Usage: logout device\n");
    return 1;
  }
}

编译它:

gcc -lutil -o logout logout.c

然后在手指的“On since”行的输出中作为参数运行它:

# finger xxxx
Login: xxxx                             Name:
Directory: /home/xxxx                   Shell: /bin/bash
On since Sun Feb 26 11:06 (GMT) on 127.0.0.1:6 (messages off) from 127.0.0.1
On since Fri Feb 24 16:53 (GMT) on pts/6, idle 3 days 17:16, from 127.0.0.1
Last login Mon Feb 10 14:45 (GMT) on pts/11 from somehost.example.com
Mail last read Sun Feb 27 08:44 2014 (GMT)
No Plan.

# userdel xxxx
userdel: account `xxxx' is currently in use.
# ./logout 127.0.0.1:6
# ./logout pts/6
# userdel xxxx
no crontab for xxxx
于 2017-02-27T14:32:36.070 回答