it-swarm.com.de

wie man das tty in unix tötet

Dies ist das Ergebnis des Befehls finger (Heute (Montag), wenn ich (Vidya) angemeldet bin).

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

Unter der Spalte Tty pts/0 and pts/5 befinden sich die aktuell aktiven Terminals. 

Abgesehen von diesen beiden sind pts/6, pts/9 und pts/10 auch vorhanden und ich hatte mich letzte Woche bei diesen angemeldet. Die Leerlaufzeit für sie wird jedoch als "-" (nicht im Leerlauf) angezeigt. 

Wie kann ich diese 6,9 ​​und 10 Terminals töten?

27
Vidya Sagar

Du kannst rennen:

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

Dies würde eine Ausgabe ähnlich der folgenden erzeugen:

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

Holen Sie sich die PID aus dem Ergebnis.

Verwenden Sie die PIDs, um die Prozesse zu beenden:

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

Für das obige Beispiel:

kill 772 773 774

Wenn der Prozess nicht ordnungsgemäß beendet wird, können Sie als letzte Option zwangsweise durch Senden eines SIGKILL

kill -9 <PID>
37
Tuxdude

Ich hatte die gleiche Frage wie Sie, aber ich wollte das gnome-Terminal, in dem ich war, töten. Ich las das Handbuch zu "who" und stellte fest, dass Sie alle Sitzungen, die auf Ihrem Computer angemeldet sind, mit der Option "-a" und anzeigen können dann druckt die Option '-l' die Anmeldeprozesse des Systems. 

who -la

What who gave me Sie sollten so etwas bekommen. Dann musst du nur noch den Prozess mit dem Befehl 'kill' beenden.

kill <PID>
25
Jacob Bryan

zum Beispiel töte Punkte/0

pkill -9 -t pts/0
20
dli

Versuche dies:

skill -KILL -v pts/6

skill -KILL -v pts/9

skill -KILL -v pts/10
10
b u l o y

sie müssen die pts-Nummer nicht kennen, geben Sie einfach Folgendes ein:

ps alle | Grep Bash

dann:

töte pid1 pid2 pid3 ...

1
T-Bee

Ich hatte heute das gleiche Problem. Ich hatte KEINE verbleibenden Prozesse, aber der verbleibende Fingereingabe von Benutzer "xxx",.

Fehlermeldung war: userdel: Konto `xxx 'wird gerade verwendet.

Es sah aus wie eine abgestürzte Terminalsitzung. Also startete ich neu, aber das Problem blieb bestehen.

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

Also habe ich die/var/run/utmp-Datei (erneut) verschoben:

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

Dadurch werden alle Fingereingaben gelöscht. Leider werden auf diese Weise auch die laufenden Sitzungen gelöscht. Wenn dies ein Problem für Sie ist, müssen Sie einen Neustart durchführen, nachdem Sie die utmp-Datei (erneut) verschoben haben.

In meinem Fall war dies jedoch die Lösung. Danach konnte ich den Benutzer mit "userdel xxx" erfolgreich löschen.

1
AIXroot

Wenn Sie tty für einen bestimmten Benutzer mit dem gesamten Prozess schließen möchten, ist der obige Befehl der einfachste. Sie können verwenden:

killall -u user_name
0
Dragos Alexe

Am einfachsten geht es mit dem Befehl pkill . In Ihrem Fall:

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

In Bezug auf tty-Sitzungen sind die folgenden Befehle immer nützlich:

w - zeigt aktive Terminalsitzungen an

tty - zeigt Ihre aktuelle Terminalsitzung an (damit Sie sie nicht aus Versehen schließen)

last | grep logged - zeigt die aktuell angemeldeten Benutzer an

Manchmal möchten wir alle Sitzungen eines untätigen Benutzers schließen (dh wenn Verbindungen abrupt unterbrochen werden).

pkill -u username - beendet alle Sitzungen des Benutzers mit dem Benutzernamen.

Und manchmal, wenn wir alle unsere eigenen Sitzungen außer der aktuellen beenden wollen, habe ich ein Skript dafür erstellt. Es gibt einige Kosmetika und etwas Interaktivität (um ein versehentliches Ausführen des Skripts zu vermeiden).

#!/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
0

Sie können auch den Killall-Befehl verwenden.

-o, --old-than Stimmen Sie nur Prozesse ab, die älter sind (vor dem Start), als angegeben. Die Zeit wird als Float und dann als Einheit angegeben. Die Einheiten sind s, m, h, d, w, M, y für Sekunden, Minuten, Stunden, Tage.

-e, --exact Erfordert eine genaue Übereinstimmung für sehr lange Namen.

-r, --regexp Interpretieren Sie das Prozessnamenmuster als erweiterten regulären Ausdruck.

Das hat wie ein Zauber funktioniert.

0
samtoddler