Comment voir quelle application et quels processus sont en cours d'exécution récemment après la connexion à l'aide de la commande terminal.
Le script suivant répertorie tous les processus et les scinde en applications et en autres processus .
En tant que définition pour une application, je pratique que le processus soit lancé à partir d'un fichier .desktop
(car pratiquement toutes les applications sont représentées par un fichier .desktop
) et que le fichier .desktop
apparaît dans le tableau de bord. (le fichier .desktop
n'a pas de ligne: NoDisplay=true
).
Travail à faire:
Le script, tel quel, tire le nom du processus de l'application de la (dernière section de) de la commande, trouvée dans le fichier du bureau, ainsi que des informations contenues dans les liens symboliques possibles auxquels elle pourrait faire référence (par exemple, dans le cas de LibreOffice
> nom du processus: soffice.bin
). Toutefois, dans certains cas, une application s'exécute à partir d'un script distant, appelé à partir du fichier .desktop
. Dans ce cas, le processus ne sera pas reconnu comme une application.
Le script donne une sortie comme:
Processes, related to applications:
PID TTY TIME CMD
1933 ? 00:03:55 firefox
18091 ? 00:00:00 dia
18162 ? 00:00:01 soffice.bin
31167 ? 00:00:06 alarm-clock-app
31174 ? 00:00:09 nautilus
31301 ? 00:00:20 dropbox
31998 ? 00:01:35 idle3
Other processes:
PID TTY TIME CMD
1 ? 00:00:01 init
2 ? 00:00:00 kthreadd
3 ? 00:00:02 ksoftirqd/0
5 ? 00:00:00 kworker/0:0H
7 ? 00:00:15 rcu_sched
8 ? 00:00:08 rcuos/0
etc...
Le script
#!/usr/bin/env python3
import os
import subprocess
def createlist_appcommands():
dtfile_dir = "/usr/share/applications"
dtfile_list = [item for item in os.listdir(dtfile_dir) if item.endswith(".desktop")]
commands = []
for item in dtfile_list:
try:
with open(dtfile_dir+"/"+item) as data:
searchlines = data.readlines()
command = [line for line in searchlines if line.startswith("Exec=")
and not "NoDisplay=true\n" in searchlines
][0].replace("Exec=", "").replace("\n", "").split("/")[-1].split(" ")[0]
commands.append(command)
except Exception:
pass
return commands + [trace_symlinks(item) for item in commands if not trace_symlinks(item)== None]
def trace_symlinks(command):
target = subprocess.Popen(["which", command], stdout=subprocess.PIPE)
location = (target.communicate()[0].decode("utf-8")).split("\n")[0]
check_filetype = subprocess.Popen(["file", location], stdout=subprocess.PIPE)
filetype = (check_filetype.communicate()[0].decode("utf-8")).split("\n")[0]
if "symbolic link" in filetype:
return filetype.split("/")[-1].replace("' ", "")
else:
pass
def createlist_runningprocs():
processesb = subprocess.Popen(["ps", "-e"], stdout=subprocess.PIPE)
process_listb = (processesb.communicate()[0].decode("utf-8")).split("\n")
linked_commands = [(item, item[24:]) for item in process_listb][1:]
applist = createlist_appcommands()
print("Processes, related to applications:\n PID TTY"+" "*10+"TIME CMD")
matches = []
for item in applist:
for i in range(0, len(linked_commands)):
if item[:15] in linked_commands[i][1] and len(item[:15])/len(linked_commands[i][1]) > 0.5:
matches.append(i)
matches = sorted(matches)
for i in range(0, len(linked_commands)):
if i in matches:
print(linked_commands[i][0])
print("\nOther processes:\n PID TTY"+" "*10+"TIME CMD")
for i in range(0, len(linked_commands)):
if not i in matches:
print(linked_commands[i][0])
createlist_runningprocs()
Comment utiliser
Copiez le script dans un fichier vide, enregistrez-le sous le nom processes.py
, exécutez-le à l'aide de la commande suivante:
python3 /path/to/processes.py
Edit: mise à jour ma réponse, réécriture du script.
Améliorations:
(beaucoup) de meilleures performances
, le script trace et reconnaît maintenant les applications, lancées via des liens symboliques (qui peuvent avoir un autre nom de processus). Bien que des exceptions soient toujours possibles, elles devraient être rares maintenant.
Généralement, la commande ps
le fait.
Si vous tapez man ps
, vous obtiendrez le manuel de cette commande et vous pourrez y vérifier l’indicateur dont vous aurez besoin. Par exemple, _ps -e
_ liste tous les processus en cours d'exécution sur le système.
Une autre commande est top
qui affichera une vue active de tous les processus en cours.