while statement script loop for bash scripting while-loop kill kill-process

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