Como encontrar o PID do processo nginx

4

Estou tentando corrigir um problema com o nginx e acho que existe um processo nginx em execução na minha máquina. Quando eu executo este comando, recebo esta saída.

$ ps aux -P | grep nginx
1000      3947  0.0  0.0  13596   932 pts/0    S+   14:05   0:00 grep --color=auto nginx

Mas se eu tentar matar os processos 1000, 3947, 13596 ou 932, recebo erros como:

bash: kill: (1000) - No such process

O que está acontecendo? Como faço para encontrar e matar o processo nginx?

    
por bernie2436 13.08.2014 / 21:08

8 respostas

5

Geralmente, acho pgrep mais conveniente do que ps | grep . Você também pode querer olhar para killall se o objetivo final é explodir um monte de processos pelo nome.

    
por 13.08.2014 / 23:05
4

ps aux -P mostra estas colunas:

$ ps aux -P | head -1
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND

Apenas a segunda coluna é o pid.

Atenção: não tente matar pids aleatórios.

pid 3947 foi o processo do grep que terminou quando você recebeu o seu prompt, então não existe esse processo.

Se houvesse um processo nginx, você o teria visto na saída do grep. Conclusão: O nginx não está sendo executado em sua máquina.

    
por 13.08.2014 / 21:17
3

Um truque comum para evitar que o comando grep seja exibido em ps output é colocar o primeiro caractere em uma classe de caracteres para que ele não corresponda ao seu literal. Ou seja,

$ ps aux | grep [n]ginx

Dessa forma, o padrão grep corresponderá a "nginx", mas não ao literal "[n] ginx" exibido na saída ps .

    
por 14.08.2014 / 06:17
2

But if I try to kill processes 1000, 3947, 13596 or 932 I get errors like [...]

na saída de ps , 1000 é o ID do usuário do processo ( grep nesse caso), 3947 é o PID de grep e os outros números são valores de parâmetro de status e nem todos os PIDs .

Se você quiser ver todos os processos pelo nome, use algo como

ps -lfC nginx

ressalva: você precisa saber o nome exato, senão o ps não retorna nada. Se você não sabe o nome exato, use pgrep .

    
por 14.08.2014 / 01:15
1

Muitas vezes você deve usar sudo para gerenciar nginx process. Pré-carregue todos os comandos abaixo com sudo se você obteve o erro 'Operação não permitida'. Embora essa questão seja marcada como 'ps', gostaria de mencionar as outras oportunidades.

Caso você queira apenas parar o nginx, eu recomendaria o uso de:

service nginx stop

Mas se o seu propósito é encontrar o próprio 'pid' (para enviar um sinal, por exemplo) eu recomendo procurar por nginx.pid . Uma vez que o nginx é iniciado, ele coloca o pid neste arquivo.

nginx can be controlled with signals. The process ID of the master process is written to the file /usr/local/nginx/logs/nginx.pid by default

Pode estar em outro lugar, no entanto.

Caso você tenha compilado o nginx por youself , você pode ter especificado pid-path também.

--pid-path=path — sets the name of an nginx.pid file that will store the process ID of the main process. After installation, the file name can always be changed in the nginx.conf configuration file using the pid directive. By default the file is named prefix/logs/nginx.pid

Caso contrário, você pode especificar o caminho para o arquivo pid explicitamente em nginx.conf .

Leia sobre Controle de Nginx

Então, para enviar um sinal, basta digitar:

kill 'cat /path/to/nginx.pid'

Ou

kill $(cat /path/to/nginx.pid)

Leia sobre a eliminação do processo por arquivo pid .

Pessoalmente, escrevendo script ou instruções de implantação, eu não confiaria parar ou pesquisar nginx pid em pgrep e especialmente em grep , embora eles sejam aplicáveis na máquina local. Mas neste caso eu encurtaria a parada para pkill (kill do processo):

pkill nginx
    
por 19.11.2015 / 10:30
0

na maioria das instalações do nginx você pode encontrar o pid no sistema de arquivos: cat /var/run/nginx.pid

    
por 16.07.2016 / 22:40
0

Para matar todos os processos nginx que você poderia fazer:

kill $(ps aux | grep 'nginx' | awk '{print $2}')
    
por 17.05.2018 / 21:59
0

Execute este comando:

sudo kill -9 $(ps aux | grep 'nginx' | awk '{print $2}')
    
por 09.08.2018 / 17:41

Tags