GNU/Linux >> Tutoriels Linux >  >> Linux

Tuez tous les processus en cours d'exécution pendant plus de 5 minutes par un utilisateur donné dans le script Linux bash

Solution 1 :

kill -9 $(ps -eo comm,pid,etimes | awk '/^procname/ {if ($3 > 300) { print $2}}')

où "procname" est un nom de processus et 300 est le seuil de temps d'exécution

Solution 2 :

Exécutez peut-être la commande de longue durée comme celle-ci dans un crontab ?

timeout -k 300 command

Solution 3 :

Ma version du kill script, tirant parti des deux réponses précédentes :

#!/bin/bash

#Email to send report
MY_EMAIL="[email protected]"

#Process name to kill
NAME_KILL="php"

#UID to kill
UID_KILL=33.

#Time in seconds which the process is allowed to run
KILL_TIME=60

KILL_LIST=()
EMAIL_LIST=()
while read PROC_UID PROC_PID PROC_ETIMES PROC_ETIME PROC_COMM PROC_ARGS; do
    if [ $PROC_UID -eq $UID_KILL -a "$PROC_COMM" == "$NAME_KILL" -a $PROC_ETIMES -gt $KILL_TIME ]; then
    KILL_LIST+=("$PROC_PID");
    MSG="Killing '$PROC_ARGS' which runs for $PROC_ETIME";
    EMAIL_LIST+=("$MSG");
    echo "$MSG";
    fi
done < <(ps eaxo uid,pid,etimes,etime,comm,args | tail -n+2)
if [ ${#KILL_LIST[*]} -gt 0 ]; then
    kill -9 ${KILL_LIST[@]}
    printf '%s\n' "${EMAIL_LIST[@]}" | mail -s "Long running processes killed" $MY_EMAIL
fi

Il filtre le processus par UID, NOM et si le temps d'exécution dépasse la limite - tue les processus et envoie le rapport par e-mail. Si vous n'avez pas besoin de cet e-mail - vous pouvez simplement commenter la dernière ligne.

Solution 4 :

Il y a un script ici que vous pouvez modifier pour faire ce que vous voulez.

EDIT a ajouté le script ci-dessous

#!/bin/bash
#
#Put the UID to kill on the next line
UID_KILL=1001

#Put the time in seconds which the process is allowed to run below
KILL_TIME=300

KILL_LIST=`{
ps -eo uid,pid,lstart | tail -n+2 |
    while read PROC_UID PROC_PID PROC_LSTART; do
        SECONDS=$[$(date +%s) - $(date -d"$PROC_LSTART" +%s)]
        if [ $PROC_UID -eq $UID_KILL -a $SECONDS -gt $KILL_TIME ]; then
        echo -n "$PROC_PID "
        fi
     done 
}`

if [[ -n $KILL_LIST ]]
then
        kill $KILL_LIST
fi

Solution 5 :

J'ai trouvé la solution sur cette page :http://www.directadmin.com/forum/showthread.php?t=26179

Créez un fichier vide et appelez-le killlongproc.sh

Copier ceci :

#!/bin/bash
# This script will kill process which running more than X hours
# egrep: the selected process; grep: hours
PIDS="`ps eaxo bsdtime,pid,comm | egrep "spamd|exim|mysqld|httpd" | grep " 1:" | awk '{print $2}'`"

# Kill the process
echo "Killing spamd, exim, mysqld and httpd processes running more than one hour..."
for i in ${PIDS}; do { echo "Killing $i"; kill -9 $i; }; done;

Arrêtez ça dans votre cronjob

15 * * * * * root /{directory}/./killongproc.sh

Linux
  1. 9 outils de productivité pour Linux qui méritent votre attention

  2. Comment puis-je écrire un script bash Linux qui m'indique quels ordinateurs sont allumés dans mon réseau local ?

  3. exécution d'un script php (fonction php) sous linux bash

  4. Vérifier qu'il y a au moins deux arguments donnés dans un script bash

  5. Comment arrêter manuellement un script Python qui s'exécute en continu sous Linux

Les meilleures distributions Linux qui conviennent le mieux aux débutants

Comment tuer les processus en cours d'exécution sous Linux

Maîtriser le processus Linux Kill à l'aide de ps, pgrep, pkill et plus

Quels sont les bons livres Linux/Unix pour un utilisateur avancé ?

Comment tuer tous les processus avec un nom partiel donné ?

Existe-t-il des interfaces graphiques pour Linux qui n'utilisent pas X11 ?