statement - bash: contador dentro de un ciclo while(kill and kill-9)
while inline bash (4)
Claro, usa un mostrador, pero eso es un poco complicado.
Lo que probablemente quieras hacer es utilizar 0
como señal, lo que no afectará el proceso, pero te permitirá verificar si el proceso aún está activo. ( kill -0 $pid
devolverá un estado de salida distinto de cero si el proceso no existe.) Y entonces, ya sabes, no acaba de kill -9
. Los procesos no se atascan sin ningún motivo, se quedan atascados porque no pueden soltar un recurso, como cuando ocurre el bloqueo de la red o del sistema de archivos. Resuelva el bloque, luego el proceso puede limpiarlo por sí mismo.
Así que he aprendido recientemente que kill no es un comando sincrónico , entonces estoy usando este ciclo while en bash, que es increíble:
while kill PID_OF_THE_PROCESS 2>/dev/null; do sleep 1; done
Sin embargo, hay casos (muy raros, pero aún ocurren) en los que el proceso se atasca y no actúa sobre la señal de muerte. En estos casos, la única forma de matar la aplicación es usando " kill -9 ".
Entonces, me pregunto, ¿cómo se modificaría el ciclo while arriba, en bash, para usar el argumento -9 solo si el ciclo ha alcanzado la décima iteración?
Como otros usuarios dijeron ... tienes que arreglar la causa del bloqueo antes de usar este método brutal ... de todos modos ... prueba esto
#!/bin/bash
i=0
PID_OF_THE_PROCESS="your pid you can set as you like"
# send it just once
kill $PID_OF_THE_PROCESS 2>/dev/null;
while [ $i -lt 10 ];
do
# still alive?
[ -d /proc/$PID_OF_THE_PROCESS ] || exit;
sleep 1;
i=$((i+1))
done
# 10 iteration loop and still alive? be brutal
kill -9 $PID_OF_THE_PROCESS
Es suficiente para enviar la señal una vez.
kill $PID 2>/dev/null
sleep 10;
if kill -0 $PID 2>/dev/null
kill -9 $PID
fi
Para su pregunta contraria:
c=0
while true; do
echo $c;
c=$((c+1));
if [ $c -eq 10 ]; then break; fi;
done
Hay varias formas de lograr esto, pero solicitó modificar su ciclo existente, entonces:
count=0
while kill PID_OF_THE_PROCESS 2>/dev/null
do
sleep 1;
(( count++ ))
if (( count > 9 ))
then
kill -9 PID_OF_THE_PROCESS 2>/dev/null
fi
done