Mon programme peut suggérer à un utilisateur de fermer un processus spécifique s'il consomme trop de mémoire (ex: firefox ou chrome).Comment vérifier si un processus est un processus système sous Linux?
Cependant, sur mon système (Ubuntu 16.10 GNOME), certains processus spécifiques au système comme gnome-shell
consomment trop de mémoire.
Mon client n'a aucune idée si un processus spécifique peut être fermé ou non.
Comment déterminer si un processus est un processus système (comme gnome-shell) et éviter de le fermer?
Voilà comment je suis le PID et obtiens nom du processus de ceux qui consomment de la mémoire max:
FILE * pipe = popen("ps aux --sort=-%mem | awk 'NR<=2{print $2}'", "r");
if(pipe)
{
char line[line_buf];
while(fgets(line, sizeof line, pipe) != NULL)
{
if(sscanf(line, "%d", &_pid) == 1)
{
_mem->pid = _pid;
}
}
}
pclose(pipe);
if(_mem->pid != 0) {
char command[128], pidname[40];
snprintf(command, sizeof command, "cat /proc/%d%s", _pid, "/comm");
FILE * _pipe = popen(command, "r");
if(pipe)
{
char line[line_buf];
fgets(line, sizeof line, _pipe);
sscanf(line, "%s\n", pidname);
}
pclose(_pipe);
strcpy(_mem->pname, pidname);
}
Il n'y a pas de distinction facile entre ce genre de « processus système » comme gnome-shell et tout autre processus utilisateur. Si Linux manque de mémoire, l'oom-killer essaiera de faire lui-même un choix qualifié et de terminer les processus jusqu'à la fin de la condition oom. Cela ne fonctionne pas toujours parfaitement, mais dans de nombreux cas, cela fait du bon travail! – Ctx
Donc, fondamentalement, je devrais laisser le travail à l'OS lui-même? –
Pour ce qui est de linux, je le suggérerais – Ctx