how to kill the tty in unix

前端 未结 10 1499
遇见更好的自我
遇见更好的自我 2020-12-23 20:52

This is the result of the finger command (Today(Monday) when I (Vidya) logged in)

sekic1083 [6:14am] [/home/vidya] -> finger
Name        Tty          


        
相关标签:
10条回答
  • 2020-12-23 21:33

    In addition to AIXroot's answer, there is also a logout function that can be used to write a utmp logout record. So if you don't have any processes for user xxxx, but userdel says "userdel: account xxxx is currently in use", you can add a logout record manually. Create a file logout.c like this:

    #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;
      }
    }
    

    Compile it:

    gcc -lutil -o logout logout.c
    

    And then run it for whatever it says in the output of finger's "On since" line(s) as a parameter:

    # 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
    
    0 讨论(0)
  • 2020-12-23 21:34

    Try this:

    skill -KILL -v pts/6
    
    skill -KILL -v pts/9
    
    skill -KILL -v pts/10
    
    0 讨论(0)
  • 2020-12-23 21:38

    You can run:

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

    This would produce an output similar to:

    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
    

    Grab the PID from the result.

    Use the PIDs to kill the processes:

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

    For the above example:

    kill 772 773 774
    

    If the process doesn't gracefully terminate, just as a last option you can forcefully kill by sending a SIGKILL

    kill -9 <PID>
    
    0 讨论(0)
  • 2020-12-23 21:38

    You can use killall command as well .

    -o, --older-than Match only processes that are older (started before) the time specified. The time is specified as a float then a unit. The units are s,m,h,d,w,M,y for seconds, minutes, hours, days,

    -e, --exact Require an exact match for very long names.

    -r, --regexp Interpret process name pattern as an extended regular expression.

    This worked like a charm.

    0 讨论(0)
  • for example kill pts/0

    pkill -9 -t pts/0
    
    0 讨论(0)
  • 2020-12-23 21:50

    If you want to close tty for specific user with all the process, above command is the easiest. You can use:

    killall -u user_name
    
    0 讨论(0)
提交回复
热议问题