Script bash killare processi lunghi

Nel precedente articolo avevo creato un script per killare un processo specifico e tutti i suoi figli.

Ho modificato quello script per cercare un tutti i processi che stanno girando da un tempo prefissato, in questo caso ho scelto 1 ora:


#!/bin/bash

### Script che elenca e killa tutti i processi con il nome passato come argomento
### che girano da + di 1 ora

usage(){
echo "utilizzo: $0 nomeprocesso"
exit
}

if [ $# -lt 1 ]
then
usage
fi

find_children()
{
children="`ps -ef|awk '$3 == l_proc {print $2}' l_proc=$J`"
for J in ${children}
do
echo "Child = $J"
if [ $J -eq $$ ]
then
#echo "Processo figlio sono io!"
### Svuoto proc_list per prevenire il suicidio.
###
proc_list=""
else
proc_list="$J $proc_list"
find_children
fi
done
}

# + 10 minuti
#PIDS="`ps eaxo etime,pid,comm | egrep $1 | grep "\([0-9][0-9]:\)\?[1-9][0-9]:[0-9][0-9]" | awk '{print $2}'`"
# + di 1 ora
PIDS="`ps eaxo etime,pid,comm | egrep $1 | grep "[0-9][1-9]:[0-9][0-9]:[0-9][0-9]" | awk '{print $2}'`"

for J in ${PIDS}
do
if [ $J -ne $$ ]
then
echo "Parent = $J"
###
### Inizia la lista dei processi
###
proc_list=$J
find_children
###
### Ora ho la lista completa per il PID corrente
###
#
if [ "$proc_list" != "" ]
then
echo "kill -9 $proc_list"
kill -9 $proc_list
fi
fi
done

Commenti