logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).


L'icône rouge permet de télécharger chaque page du wiki visitée au format PDF et la grise au format ODT → ODT PDF Export

Table des matières

Processus Swapés

  • Afficher les processus utilisant le swap ainsi que leur PID et la taille utilisée en swap.
  • Script directement fonctionnel (pas de modification nécessaire).
Ce script se relance tout seul en sudo. Votre mot de passe sera demandé.
Pour éviter cela, vous pouvez ajouter un fichier (sans extension) dans /etc/sudoers.d ayant ce contenu (à adapter à votre situation) :
Nom_Utilisateur Nom_Machine = NOPASSWD: /chemin/absolu/du/script/procswap


Nécessite gawk :
apt install gawk

L'aide

Processus Swapés - procswap
Usage :    procswap [OPTIONS]

Afficher la liste des processus utilisant le swap.

Options :
    -b, --binaire    Utiliser des puissances de 1024 pour les tailles.
                     Les unités affichées sont kB, MB et GB.
                     Comportement par défaut.

    -d, --decimal    Utiliser des puissances de 1000 pour les tailles.
                     Les unités affichées sont ko, Mo et Go.

    -h, --help       Afficher cette aide et quitter.

    -o, --only-list  Afficher que la liste des processus (+pid +user +taille).
                     N'affiche pas l'entête, ni le nombre de processus,
                     ni le volume total occupé en Swap par les processus.
                                                                       Tawal®©

Le script

procswap
#!/bin/bash
 
### Couleurs et Formats Textes
Surb='\e[1m'
Rst='\e[m'
 
### Option par défaut.
opt_size="b"   # Par défaut afficher les tailles en puissances de 1024
 
### Fonctions
usage() {
    echo -e "Processus Swapés - ${Ital}${0##*/}${Rst}
Usage :    ${Surb}${0##*/} [OPTIONS]${Rst}
 
Afficher la liste des processus utilisant le swap.
 
Options :
    -b, --binaire    Utiliser des puissances de 1024 pour les tailles.
                     Les unités affichées sont ${Surb}kB${Rst}, ${Surb}MB${Rst} et ${Surb}GB${Rst}.
                     Comportement par défaut.
 
    -d, --decimal    Utiliser des puissances de 1000 pour les tailles.
                     Les unités affichées sont ${Surb}ko${Rst}, ${Surb}Mo${Rst} et ${Surb}Go${Rst}.
 
    -h, --help       Afficher cette aide et quitter.
 
    -o, --only-list  Afficher que la liste des processus (+pid +user +taille).
                     N'affiche pas l'entête, ni le nombre de processus,
                     ni le volume total occupé en Swap par les processus."
    printf "%80s\n" "Tawal®©"
    exit 0
}
 
err_opt() {
    echo -e "L'option '${Surb}$1${Rst}' n'est pas reconnue !" >&2
    exit 1
}
 
err_2many_opts() {
    echo -e "Les options '${Surb}-b${Rst}' et '${Surb}-d${Rst}' ne sont pas compatibles entre elles !" >&2
    exit 1
}
 
 
### Gestion Options
while getopts :hbdo-: option
do
    case "$option" in
        h) usage
           ;;
        b) opt_b="ON"
           [ "$opt_d" ] && err_2many_opts || opt_size="b"
           ;;
        d) opt_d="ON"
           [ "$opt_b" ] && err_2many_opts || opt_size="d"
           ;;
        o) opt_o="ON"
           ;;
        -) case $OPTARG in
                  help) usage
                        ;;
               binaire) [ "$opt" ] && err_2many_opts || opt_size="b"
                        ;;
               decimal) [ "$opt" ] && err_2many_opts || opt_size="d"
                        ;;
             only-list) opt_o="ON"
                        ;;
                     *) err_opt --"$OPTARG"
                        ;;
           esac
           ;;
        *) err_opt -"$OPTARG"
           ;;
    esac
 
done
 
 
### Ré-exécution avec droits root si lancé en user
if [[ $UID != 0 ]]
then
    sudo "$0" "$@"
    exit $?
fi
 
 
### Corps du Programme
tail -n +1 /proc/[0-9]*/smaps 2>/dev/null | gawk -v opt="$opt_size" -v o="$opt_o" '
    function b2h(mem,p,    x){
        m=mem
        while(int(m/=p))x++
        return x
    }
    BEGIN{
        if (opt == "d") {
            p=1000
            exp2unit[1]="ko"; exp2unit[2]="Mo"; exp2unit[3]="Go"
        }else{
            p=1024
            exp2unit[1]="kB"; exp2unit[2]="MB"; exp2unit[3]="GB"
        }
    }
 
    {
        if (/^==>/) {
            f=$2
            tgid=gensub(/\/proc\/([0-9]*)\/smaps/, "\\1", 1, f)
            file="/proc/"tgid"/comm"
            getline name < file
            close(file)
        }
        if (/^Swap:/ && $2>0) {
            byteSize=$2*1024
            if ( ! (tgid in procName)) {procName[tgid]=name}
            procSwap[tgid]+=byteSize
            totSwap+=byteSize
        }
    }
 
    END{
        PROCINFO["sorted_in"]="@val_num_desc"
        if (totSwap>0) {
            if (!o) {printf("%-18s %7s %12s\n\n", "NOM", "PID", "TAILLE")}
            for(pid in procSwap){
                sizeSwap=procSwap[pid]
                xp=b2h(sizeSwap,p)
                if(xp==1){prec="d"}else{prec=".1f"}
                printf("%-18s %8d %8"prec" %s\n", procName[pid], pid, sizeSwap/p^xp, exp2unit[xp])
                nb++
            }
            if (!o) {
                if (nb>1) {nt="nt"}
                print "\n"nb,"processus utilise"nt" le Swap"
                xp=b2h(totSwap,p)
                if(xp==1) { prec="d"}else{prec=".1f"}
                printf("Volume occupé en Swap : %"prec" %s\n\n",totSwap/p^xp, exp2unit[xp])
            }
        }else{
            if (!o) {printf("Aucun processus en swap.\n")}
        }
    }'

Exemple de retour

procswap
NOM                    PID       TAILLE

conky                  2231      1.3 MB
conky                  2215      1.0 MB
ssh-agent              1977      372 kB
gnome-keyring-d        2000      236 kB

4 processus utilisent le Swap
Volume occupé en Swap : 2.9 MB
utilisateurs/tawal/scripts/procswap-lister-les-processus-swapes.txt · Dernière modification: 15/05/2023 18:13 par Tawal

Pied de page des forums

Propulsé par FluxBB