desenv-web-rp.com

Como encerrar um processo em segundo plano?

Eu iniciei um wget na máquina remota em segundo plano usando &. De repente, ele para de baixar. Quero encerrar o processo e, em seguida, execute novamente o comando. Como posso encerrá-lo?

Não fechei a janela do Shell. Mas como você sabe, não para de usar Ctrl+C e Ctrl+Z.

213
Mohammad Etemaddar

Existem muitas maneiras de fazer isso.

Método # 1 - ps

Você pode usar o comando ps para encontrar o ID do processo e, em seguida, usar o PID para interromper o processo.

Exemplo

$ ps -eaf | grep [w]get 
saml      1713  1709  0 Dec10 pts/0    00:00:00 wget ...

$ kill 1713

Método # 2 - pgrep

Você também pode encontrar o ID do processo usando pgrep.

Exemplo

$ pgrep wget
1234

$ kill 1234

Método # 3 - pkill

Se você tem certeza de que é o único wget que você executou, pode usar o comando pkill para eliminar o trabalho pelo nome.

Exemplo

$ pkill wget

Método # 4 - trabalhos

Se você estiver no mesmo Shell de onde executou o trabalho que está agora em segundo plano. Você pode verificar se ainda está em execução usando o comando jobs e também eliminá-lo pelo número do trabalho.

Exemplo

Meu trabalho falso, sleep.

$ sleep 100 &
[1] 4542

Encontre o número do trabalho. NOTA: o número 4542 é o ID do processo.

$ jobs
[1]+  Running                 sleep 100 &

$ kill %1
[1]+  Terminated              sleep 100

Método # 5 - fg

Você pode trazer um trabalho em segundo plano de volta ao primeiro plano usando o comando fg.

Exemplo

Trabalho falso, sleep.

$ sleep 100 &
[1] 4650

Obter o número do trabalho.

$ jobs
[1]+  Running                 sleep 100 &

Traga o trabalho nº 1 de volta ao primeiro plano e use Ctrl+C.

$ fg 1
sleep 100
^C
$
274
slm

No bash, você pode usar fg para colocar o trabalho em primeiro plano e, em seguida, usar Ctrl+C

Ou liste o processo em segundo plano com jobs e faça

kill %1

(com 1 substituído pelo número jobs deu a você)

77
Zelda

Você também pode usar kill $! para eliminar o trabalho em segundo plano mais recente.

14
tek0078

EDIT: Uma vez em primeiro plano, você pode Ctrl+C, ou como @Zelda menciona, mate com o '% x' onde 'x' é o número do trabalho que enviará o sinal padrão (provavelmente o SIGTERM no caso do Linux).

basta digitar fg para trazê-lo para o primeiro plano, se esse foi o último processo em segundo plano (com '&').

Se não foi o último, digite: jobs e localize o 'número do trabalho', representado em '[]'. Então digite:

fg 2

..onde '2' é o número do trabalho, por exemplo:

[email protected]:~/junk/books$ jobs
[1]+  Running                 okular how_to_cook_a_turkey.pdf &
[email protected]:~/junk/books$ fg 1
okular how_to_cook_a_turkey.pdf            <- this is now in the foreground.
6
swisscheese

A maneira correta é digitar jobs e usar o número do trabalho para eliminá-lo. Para usar o pid para matá-lo, você precisa trazê-lo para o primeiro plano, conforme observado na primeira resposta.

Tente isto

~/Desktop$ sleep 1000 &
[1] 7056

~/Desktop$ jobs

[1]+  Running  sleep 1000 &

/Desktop$ kill %1  #(%1 is the job number)

Se você executar trabalhos logo após matá-lo, deverá ver isso

Desktop$ jobs
[1]+  Terminated              sleep 1000
4
tmac

Uma coisa que não vejo aqui, que achei muito útil, especialmente ao testar comandos, é pidof. Você pode usar pidof [command] para encontrar a identificação do processo em execução no momento. Gosto porque permite encontrar rapidamente o ID do comando que desejo, que geralmente é algo que acabei de invocar.

Depois de ter o pid, você pode simplesmente matar o processo. Ele permite a criação de scripts simples para matar um processo apenas se estiver em execução no momento.

4
Try431

Um exemplo comum é a ferramenta stress. Digamos que você executou o seguinte:

$ stress -c 4 -m 4 

e fechou a janela do terminal. O processo continuaria consumindo seus recursos em segundo plano.

Dela é o que eu faço:

$ x=`pgrep stress` ; Sudo kill -9 $x 

pgrep lista os PIDs do processo submetido e os armazena na variável x, que é usada por kill -9 para finalizá-lo.

1
Saptarshi Ghosh

A maneira mais fácil é usar -9 sinalizador no comando kill

[email protected]:/path> jobs
[1]+  Running                 /usr/home/script1.sh $i &
[email protected]:/path> fg
/usr/home/script1.sh $i
^C
[1]+  Stopped                 /usr/home/script1.sh $i
[email protected]:/path> kill -9 %1
[1]+  Stopped                 /usr/home/script1.sh $i
[email protected]:/path>
[1]+  Killed                  /usr/home/script1.sh $i
[email protected]:/path>
[email protected]:/path> jobs
[email protected]:/path>
0
handba

no último processo interrompido do bash (Ctrl-Z), você mata:

kill %%
kill -9 %%

ou se desejar escolher, use:

jobs

então:

kill %N

gostar kill %2

0
Sławomir Lenart