Подтвердить что ты не робот

Как убить tty в unix

Это результат команды 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 терминалов?

4b9b3361

Ответ 1

Вы можете запустить:

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>

Ответ 2

У меня был тот же вопрос, что и вы, но я хотел убить терминал gnome, в котором я был. Я прочитал руководство по "кому" и обнаружил, что вы можете перечислить все сеансы, зарегистрированные на вашем компьютере, с помощью "-a ', а затем опция' -l 'выводит процессы входа в систему.

who -la

What who gave me Вы должны получить что-то вроде этого. Тогда все, что вам нужно сделать, это убить процесс командой "kill".

kill <PID>

Ответ 3

например, kill pts/0

pkill -9 -t pts/0

Ответ 4

Попробуйте следующее:

skill -KILL -v pts/6

skill -KILL -v pts/9

skill -KILL -v pts/10

Ответ 5

У меня была такая же проблема сегодня. У меня не было никаких оставшихся процессов, но остальная запись пальца пользователя "xxx", которые мешают мне удалить этого пользователя, используя "userdel xxx".

Появилось сообщение об ошибке: userdel: используется учетная запись `xxx '.

Это выглядело как разбитая терминальная сессия. Поэтому я перезагрузился, но проблема осталась.

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

Итак, я (re) переместил файл /var/run/utmp:

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

Это очистило все записи пальцев. К сожалению, таким образом даже текущие сеансы будут очищены. Если это проблема для вас, вам придется перезагрузиться после того, как вы (повторно) переместили файл utmp.

Однако в моем случае это было решением. Впоследствии я смог успешно удалить пользователя, используя "userdel xxx".

Ответ 6

вам не нужно знать число очков, просто введите:

ps все | grep bash

то

     
  

убить pid1 pid2 pid3...

  

Ответ 7

Вы также можете использовать команду killall.

-o, --older-than             Сопоставьте только процессы, которые были старше (начаты раньше) заданного времени. Время указывается как float, затем единица. Единицы измерения: s, m, h, d, w, M, y в секундах, минутах, часах, днях,

-e, --exact             Требовать точного соответствия для очень длинных имен.

-r, --regexp             Интерпретировать шаблон имени процесса как расширенное регулярное выражение.

Это работало как прелесть.

Ответ 8

Если вы хотите закрыть tty для конкретного пользователя со всем процессом, команда выше самая простая. Вы можете использовать:

killall -u user_name

Ответ 9

Самый простой способ - с pkill команды pkill. В твоем случае:

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

Что касается сессий tty, команды ниже всегда полезны:

w - показывает активные терминальные сессии

tty - показывает ваш текущий сеанс терминала (так что вы не закроете его случайно)

last | grep logged last | grep logged - показывает зарегистрированных пользователей

Иногда мы хотим закрыть все сессии незанятого пользователя (т.е. когда соединения теряются внезапно).

pkill -u username - убивает все сеансы пользователя '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 "[email protected]|^$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

Ответ 10

В дополнение к ответу AIXroot существует также функция выхода, которая может быть использована для записи записи выхода utmp. Поэтому, если у вас нет процессов для пользователя xxxx, но userdel говорит, что "userdel: учетная запись 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

И затем запустите его для того, что он говорит в выводе пальца "Вкл. с" строки (-ов) в качестве параметра:

# 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