Dando sequência a meus artigos introdutórios sobre
*Unix, vamos aprender como obter informações dos processos que estão ocorrendo no sistema para usá-las em nossos scripts.
Ou simplesmente, para aprender mais sobre nosso sistema.
Uma maneira, simples, de ver um sistema operacional, é vê-lo como um punhado de processos / programas / comandos rodando no sistema, fazendo com que tudo funcione.
Estes processos tem as mais variadas origens, como por parte do kernel, do usuário, da rede, de outros processos, etc.
Logo adiante, ao checar os processos vigentes no seu sistema, entenderá melhor quando vê-los.
Poucos são os scripts em Shell que são isolados, ou seja, que são auto-suficientes em informação, comandos, processamento e armazenagem de dados.
O propósito e uso maior dos Shell Scripts, é interagir com o sistema. Afinal, o Shell é do Unix, e foi criado para interagir com o sistema.
Esta interação se dá por meio da exploração dos processos que estão rodando, ou que você fará rodar, ou parar, no sistema.
Isso é feito iniciando e fechando processos, seja em
foreground (pro usuário ver) ou em
background (sem você ver), usando as variáveis do ambiente e pegando as informações de retorno do processo (códigos), dentre outras maneiras.
Checando os processos
Vamos iniciar a exploração dos processos com o comando
ps, que lista os processos ativos:
ps -ef
Ou, para
*BSD:
ps -aux
Ambos comandos funcionam em
GNU/Linux. Se quiser algo mais elaborado, use os comandos
top ou
htop.
Note os dados exibidos no terminal, principalmente a PID, que mostra a ID (identificação do processo), que é a informação que usaremos para identificar e controlar o processo.
Toda esta sopa de letras tem seu significado. E tais informações estão devidamente armazenadas em variáveis do sistema. Vamos conhecer algumas delas, que são particularmente úteis para serem usadas em scripts.
-
$$ : Mostra a ID do atual processo. Digite no terminal:
echo $$
Depois, procure essa ID na lista de processos exibida no comando
ps -ef.
Deve achar
/bin/bash ou "su -", caso esteja como root.
Caso execute este comando através de script, a ID é a do script.
-
$! : Mostra a ID do último processo que rodou em background do seu script.
Vamos criar um script para ver melhor essas variáveis em ação.
O script "proc1.sh", por si só, já é auto-explicativo:
echo "O processo atual é: $$"
echo -n "O último processo a ocorrer em background: "
# Note que não iniciamos processo algum no script
if [ "$!" == "" ]
then
echo "inexistente"
else
echo "$!"
fi
echo
echo "Executando um comando em background..."
# Vide meu artigo Pipelines caso não entenda o seguinte comando
ls /usr/bin > /dev/null &
echo "Agora, o último processo a ocorrer em background é $!"
Permita e execute para ver o resultado:
chmod +x proc1.sh
$ ./proc1.sh