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?
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>
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
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>
par exemple kill pts/0
pkill -9 -t pts/0
Essaye ça:
skill -KILL -v pts/6
skill -KILL -v pts/9
skill -KILL -v pts/10
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 ...
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".
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
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
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.