Como ver se um processo específico está rodando ou não por 1 hora no shell

Como ver se um processo específico está rodando ou não por 1 hora no shell

O nome do meu processo é test. Se eu usar

ps -ef | grep test

Vejo que o processo está em execução. Agora quero verificar isso a cada 10 minutos durante uma hora e imprimir com sucesso se estiver funcionando com sucesso por uma hora. Qual é a melhor forma de fazê-lo?

Responder1

Você pode usar um whileloop; aqui estou usando pgreppara verificar se o processo está em execução:

#!/bin/bash
counter=0
while :; do
    [ "$counter" -eq 6 ] && break
    if pgrep <process_name> &>/dev/null; then
        echo "Success !!"
        (( counter += 1 ))
        sleep 10m
    else
        echo "Process not running..exiting !!"
        break
    fi
done

Substitua <process_name>pelo nome real do processo que você deseja rastrear.

Responder2

Um loop simples em um script:

#! /bin/bash
start=$SECONDS
while (( SECONDS - start < 3600 ))
do
    sleep 10m
    pgrep -f test &>- || exit
done
echo success

SECONDSé uma variável especial no bash que contém o número de segundos desde que o script foi iniciado. pgrep testverifica um processo chamado test. Se não encontrar nenhum, saímos do script. Se não, nós sleeppor 10 minutos.

Se não saímos, pgreptivemos sucesso. Então, echo success.

informação relacionada