web-dev-qa-db-fra.com

Comment vérifier quels processus sont toujours actifs après qu'une session utilisateur se soit déconnectée

J'ai besoin de faire du travail de débogage et, dans le cadre de ce travail, j'ai besoin de savoir si des processus sont toujours en cours après la déconnexion d'une session utilisateur. Et je dois spécifiquement pouvoir aussi savoir à quel utilisateur appartiennent ces processus. Il me serait également utile de pouvoir consigner les processus toujours actifs pendant le processus d'arrêt le plus possible.

J'ai déjà essayé, par exemple, de consigner les processus qui sont toujours actifs après la déconnexion d'une session utilisateur donnée en ayant un compte administrateur actif en même temps qu'un autre compte. Ainsi, pendant que l'autre compte se déconnecte, le compte administrateur enregistre les processus activité avec:

top > ~/top.txt

Mais il y avait deux problèmes avec cela, premièrement, cela ne me permettait pas de dire quoi que ce soit à propos des processus actifs pendant le processus d'arrêt (ainsi que dans la mesure où je pouvais me connecter avant que le processus de journalisation soit terminé), et deuxièmement, la sortie dans le fichier texte était illisible pour moi parce que la plupart des lignes ressemblaient à ceci:

top strange output

Et bien que je puisse distinguer ceci et en regardant un exemple réel de top exécuté dans ma CLI, je peux dire ce que sont quelques bits, mais il est vraiment difficile de dire avec ce que je dois faire, en plus je ne Je ne sais pas à quel moment ce qui s’est passé, je ne sais pas si l’une des sorties du fichier est avant la fin de la session, après ou après un moment donné, et c’est vraiment très difficile à lire.

Je me demande donc s'il existe un moyen de mieux réaliser ce que j'essaie de réaliser? Et si quelqu'un pouvait me donner des suggestions sur la façon dont je pourrais le faire améliorer mes méthodes, ou suggérer de nouvelles méthodes.

Je pensais peut-être à exécuter automatiquement un script de journalisation en tant que root, mais en plus du risque de sécurité potentiel, cela me donnerait probablement le même résultat brouillé que celui obtenu de top auparavant. S'il vous plaît laissez-moi savoir si vous avez besoin de plus d'informations.


Informations sur le système d'exploitation:

Description:    Ubuntu 14.10
Release:    14.10
2
user364819

Vous êtes sur la bonne voie: j'aurais aussi un utilisateur qui regarde l'autre. Si top ne vous donne pas le résultat souhaité, j'utiliserais ps aux dans une boucle infinie avec un délai d'une seconde.

#!/bin/bash
# Example script for watching a logging off user
# This script is an answer to http://askubuntu.com/questions/608921/how-to-check-which-processes-are-still-active-after-a-user-session-has-logged-ou/608925#608925

# Copyright (c) 2015 Fabby

# This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
# This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. See the GNU General Public License for more details.
# You DID NOT receive a copy of the GNU General Public License along with this program as the license is bigger then this program.

while true
do
  date   >> /tmp/watch-logoff.txt
  ps aux >> /tmp/watch-logoff.txt
  sleep 1
done

Vous en arriverez à la conclusion que no, les processus appartenant à l'utilisateur déconnecté s'exécutent après leur fermeture de session complète.

2
Fabby

Cette réponse de Rad vous donne un aperçu complet de la façon d’exécuter un script particulier lors de la déconnexion ou de la fermeture.

Ce que vous pouvez faire est de créer le script comme ceci

#!/bin/bash
ps -u username > /home/yourusername/outputfile.txt

Puis Sudo chmod +x scriptname et ajouter une ligne

session-cleanup-script=/path/to/script à /etc/lightdm/lightdm.conf

Quant à l'arrêt. . . Je crois que lors de l’arrêt, il exécute /etc/rc6.d/S20sendsigs qui envoie des signaux de suppression à tous les travaux. Vous pouvez donc exécuter ce script avec le nom de fichier S10_scriptname pour le démarrer avant le script de sendigs (reportez-vous à la réponse de Radu pour plus d’informations).

Éditez: à partir du 14.04, lightdm.conf n’est pas créé par défaut, vous devrez peut-être créer ce fichier dans le répertoire /etc/lightdm/lightdm.conf.d/, avec la première ligne disant [Seat Defaults]

2

Utilisez la liste suivante pour répertorier tous les processus d’un utilisateur particulier:

$ ps -fu "username"

Par exemple:

$ ps -fu foobar

Pour l'enregistrer dans un fichier:

$ ps -fu foobar > ~/ps_foobar

Voici une ligne qui peut être utilisée via cron ou tout autre mécanisme de répétition:

[[ $(ps -u foobar | wc -l) -gt 1 ]] && echo "user foobar has process running" || echo "user foobar has no process running"

Pour vérifier les journaux lors de l’arrêt (autant que possible, enregistrez):

tail -f /var/log/syslog  ## Run it prior to shutdown

Ou tout simplement lire le fichier /var/log/syslog à tout moment, il contient les informations sur le temps complet et sera donc facile à comprendre.

1
heemayl

Vous pouvez exécuter htop à partir de l'une des consoles tty afin de pouvoir déconnecter un utilisateur d'une session xsession tout en maintenant un terminal ouvert (htop est meilleur que top et plus facile à lire).

CTRL + ALT + F2 Vous pouvez vous connecter à une session de texte sous un nom d'utilisateur différent à partir de là, puis utilisez:

Sudo htop

pour le démarrer. Utilisation F6 puis faites défiler jusqu'à USER en utilisant le bouton fléché et appuyez sur Enter. Cela filtrera les résultats par utilisateur pour faciliter la lecture à ces fins.

Pour revenir à la xsession, appuyez sur CTRL + ALT + F7 et CTRL + ALT + F2 pour revenir à tty2 encore et ainsi de suite.

1
mchid

Vous pouvez utiliser le fichier ~./Bash_logout si les utilisateurs se déconnectent (remarque, bash Shell, par exemple ssh). Mais d'autres situations sont également décrites dans l'article/la réponse ci-dessous,

superutilisateur.com: créer une tâche de script pour Linux

@heemayl et d'autres décrivent déjà certaines des commandes que vous pouvez utiliser pour obtenir les processus en cours d'exécution lorsque les utilisateurs se déconnectent.

Si vous ne voulez que les PID actifs de l'utilisateur, vous pouvez aussi utiliser ci-dessous,

$ id -u username | xargs pgrep -U
0
Sinn3d