> For the complete documentation index, see [llms.txt](https://mysther.gitbook.io/knowledge-base/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://mysther.gitbook.io/knowledge-base/sistemas-operacionais/linux/utilizacao/manipulando-processos.md).

# Manipulando Processos

Um processo é um programa em execução. Cada processo tem um ID de processo númerico chamado de PID. Entender sobre processos é essencial para um Pentester, principalmente quando estamos realizando algum PrivEsc.

#### Listando Processos

Para vermos os processos que estão sendo executados no momento, utilize o seguinte comando:

```
ps auxw
```

> **EXPLICAÇÃO**:\
> a = Mostra os processos do usuário atual e de outros usuários\
> u = Inclui informações mais detalhadas sobre os processos\
> x = Mostra os processos em execução\
> w = Mostra os nomes completos dos comandos e não apenas o que cabe em uma linha

Os campos estão descritos a seguir:

| COLUNA    | DESCRIÇÃO                                                                                                                                          |
| --------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
| `PID`     | ID do processo                                                                                                                                     |
| `TTY`     | É o dispositivo de terminal em que o processo está executando                                                                                      |
| `STAT`    | Status do processo, ou seja, o que o processo está fazendo e em que local está a sua memória. Os valores podem ser `S` (Sleeping) ou `R` (Running) |
| `TIME`    | Quantidade de tempo de CPU em minutos e segundos que o processo usou até o momento                                                                 |
| `COMMAND` | Isso parece ser óbvio, mas saiba que um processo pode alterar esse campo em relação ao seu valor original                                          |

#### Matando Processos

Para matar (encerrar) um processo, vamos enviar uma sinal para o Kernel informando o que queremos fazer com o processo. Iremos utilizar o seguinte comando `kill` seguido o `PID` do processo.&#x20;

```
kill <pid>
```

Podemos informar o tipo de sinal (por default é `TERM` (terminate). Esse processo encerra o processo da maneira correta (dando a chance do processo fazer uma limpeza antes de encerrar), mas podemos encerrá-los de outras maneiras também.

Temos o sinal `INT` (Interrupt) para interromper um processo (quando estamos no terminal e pressionamos `CTRL` + `C`, estamos mandando esse sinal automaticamente).

```
kill -INT <pid>
```

Diferente das formas anteriores, temos o sinal `KILL`, que mata o processo de uma forma mais agressiva, forçando a remoção da memória.

```
kill -KILL <pid>
```

{% hint style="warning" %}
Geralmente vemos o comando **kill -9 \<pid>**, que muitas pessoas tem o costume de usar sem saber ao certo o que está acontecendo. Esse comando é equivalente ao sinal **-KILL**, então utilize somente se necessário.
{% endhint %}

E para finalizar, vamos aprender um método mais prático (útil para quem ainda não tem muita familiaridade com o uso do terminal ou simplesmente acha mais prático) para matar processos. Para isso, deixe o seu terminal aberto em um canto da tela e a outra janela (a que está rodando o processo que deseja finalizar) em outro canto, de um modo que consiga ver as duas janelas na tela simultaneamente.\
Agora no terminal, digite `xkill` (note o ponteiro do mouse irá ficar com o formato de um **X**) e então clique na janela do processo que deseja finalizar.

#### Gerenciando Processos

Vimos que os processos podem ser inicializados e também encerrados, mas ainda não vimos como fazer um processo ficar em modo `STOP` (congelado) e depois voltando ao estado de execução.

```
# Congelando um serviço
kill -STOP <pid>

# Voltando o processo ao seu estado de execução
kill -CONT <pid>
```

Caso esteja no terminal vendo o serviço ser executado, pressione `CTRL` + `Z` para congelar o serviço (equivalente ao sinal `STOP`) e o comando `fg` para retornar o processo em modo de execução (equivalente ao sinal `CONT`).

{% hint style="info" %}
**NOTA**: É comum pressionar **`CTRL`** + **`Z`** ao invés de **`CTRL`** + **`C`** acidentalmente, e fazer um processo ficar congelado. Utilize o comando **`jobs`** para ver todos processos que estão congelados.
{% endhint %}
