如何杀死unix中的tty

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

 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是当前的活动terminal。

除了这两个pts/6 pts/9pts/10 ,我上周已经login了。 但他们的闲置时间显示为“ – ”(不闲置)。

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

你可以运行:

 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> 

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

 who -la 

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

 kill <PID> 

例如杀死pts / 0

 pkill -9 -t pts/0 

尝试这个:

 skill -KILL -v pts/6 skill -KILL -v pts/9 skill -KILL -v pts/10 

我今天也有同样的问题。 我没有剩余的进程,但用户“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”。

你也可以使用killall命令。

-o,–older-than仅匹配比指定时间早的(从前开始的)进程。 时间被指定为一个浮动然后一个单位。 单位是s,m,h,d,w,M,y秒,分,小时,

-e, – 完全需要非常长的名字的精确匹配。

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

这工作像一个魅力。

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

 killall -u user_name 

你不需要知道点数,只需键入:

ps all | grep bash

然后:

杀pid1 pid2 pid3 …

AIXroot的答案之外,还有一个注销函数可以用来写一个utmp注销记录。 因此,如果您没有用户xxxx的任何进程,但是userdel表示“userdel:account xxxx当前正在使用”,则可以手动添加注销记录。 像这样创建一个文件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