web-dev-qa-db-fra.com

comment tuer le tty sous unix

Ceci est le résultat de la commande finger (Aujourd'hui (lundi) à laquelle j'ai (Vidya) connecté)

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

Dans la colonne, le Tty pts/0 and pts/5 représente les terminaux actuellement actifs. 

En plus de ces deux pts/6, pts/9 et pts/10 sont également présents et je me suis connecté à ces derniers la semaine dernière. Mais le temps d'inactivité pour eux est indiqué par "-" (pas d'inactivité). 

Comment puis-je tuer ces 6,9 et 10 terminaux?

27
Vidya Sagar

Tu peux courir:

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

Cela produirait une sortie similaire à:

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

Prenez le PID du résultat.

Utilisez les PID pour tuer les processus:

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

Pour l'exemple ci-dessus:

kill 772 773 774

Si le processus ne se termine pas normalement, vous pouvez tuer de force en envoyant un message SIGKILL

kill -9 <PID>
37
Tuxdude

J'avais la même question que vous mais je voulais tuer le terminal gnome dans lequel j'étais. J'ai lu le manuel sur "who" et j'ai constaté que vous pouvez lister toutes les sessions connectées à votre ordinateur avec l'option '-a' et alors l'option '-l' imprime les processus de connexion du système. 

who -la

What who gave me Vous devriez obtenir quelque chose comme ça. Ensuite, tout ce que vous avez à faire est de tuer le processus avec la commande "kill".

kill <PID>
25
Jacob Bryan

par exemple kill pts/0

pkill -9 -t pts/0
20
dli

Essaye ça:

skill -KILL -v pts/6

skill -KILL -v pts/9

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

vous n'avez pas besoin de connaître le nombre de pts, il vous suffit de taper:

ps tous | grep bash

puis:

tuer pid1 pid2 pid3 ...

1
T-Bee

J'ai eu le même problème aujourd'hui. Je n'ai AUCUN processus en cours, mais le doigt restant de l'utilisateur "xxx", M'empêche de supprimer cet utilisateur à l'aide de "userdel xxx".

Le message d'erreur était: userdel: le compte «xxx» est actuellement utilisé.

Cela ressemblait à une session de terminal bloquée. Alors j'ai redémarré, mais le problème est resté.

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

J'ai donc (re) déplacé le fichier/var/run/utmp:

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

Cela efface toutes les entrées de doigt. Malheureusement, même ainsi, les sessions en cours seront effacées. Si cela vous pose problème, vous devez redémarrer après avoir (ré) déplacé le fichier utmp.

Cependant, dans mon cas, c'était la solution. Ensuite, j'ai réussi à supprimer l'utilisateur en utilisant "userdel xxx".

1
AIXroot

Si vous voulez fermer tty pour un utilisateur spécifique avec tout le processus, la commande ci-dessus est la plus simple. Vous pouvez utiliser:

killall -u user_name
0
Dragos Alexe

Le moyen le plus simple est d'utiliser la commande pkill . Dans votre cas:

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

En ce qui concerne les sessions tty, les commandes ci-dessous sont toujours utiles:

w - affiche les sessions de terminal actives

tty - affiche votre session de terminal actuelle (afin que vous ne la fermiez pas par accident)

last | grep logged - affiche les utilisateurs actuellement connectés

Parfois, nous voulons fermer toutes les sessions d’un utilisateur inactif (c’est-à-dire lorsque les connexions sont perdues de manière abrupte).

pkill -u username - tue toutes les sessions de l'utilisateur 'nom d'utilisateur'.

Et parfois, lorsque nous voulons tuer toutes nos propres sessions, à l'exception de la session en cours, j'ai donc créé un script. Il y a quelques produits cosmétiques et une certaine interactivité (pour éviter une exécution accidentelle du script).

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

Vous pouvez également utiliser la commande killall.

-o, --older-than Faites correspondre uniquement les processus qui sont plus anciens (démarrés avant) à l'heure spécifiée. Le temps est spécifié comme un float puis une unité. Les unités sont s, m, h, d, w, M, y pour les secondes, les minutes, les heures, les jours,

-e, --exact Exiger une correspondance exacte pour les noms très longs.

-r, --regexp Interpréter le modèle de nom de processus en tant qu'expression régulière étendue.

Cela a fonctionné comme un charme.

0
samtoddler