CtrlO + Cnem sempre funciona para eliminar o processo atual (por exemplo, se esse processo estiver ocupado em determinadas operações de rede). Nesse caso, você apenas vê "^ C" pelo seu cursor e não pode fazer muito mais.
Qual é a maneira mais fácil de forçar esse processo a morrer agora sem perder meu terminal?
Resumo das respostas:
Normalmente, você pode Ctrl+ Zcolocar o processo em suspensão e, em seguida kill -9 _process-pid_
, fazer , onde encontra o pid do processo com o ps e outras ferramentas. No Bash (e possivelmente em outros shells), você pode fazer kill -9 %1
(ou '% N' em geral) o que é mais fácil. Se o Ctrl+ Znão funcionar, você terá que abrir outro terminal e matar a partir daí.
screen
seria uma solução possível, permitindo criar uma nova janela ekill
o processo a partir daí.Respostas:
Para entender o problema de por que o Ctrl+ Cnão funciona, é muito útil entender o que acontece quando você pressiona:
A maioria dos shells se liga a Ctrl+ Cpara "enviar um sinal SIGINT ao programa que atualmente é executado em primeiro plano". Você pode ler sobre os diferentes sinais através do sinal manual :
Os programas podem ignorar esse sinal, como também podem ignorar o SIGTSTP :
(É o que a maioria das conchas faz quando você pressiona Ctrl+ Z, e é por isso que não é garantido que funcione.)
Existem alguns sinais que não podem ser ignorados pelo processo: SIGKILL , SIGSTOP e outros. Você pode enviar esses sinais através do comando kill . Portanto, para matar seu processo de enforcamento / zumbi, basta encontrar o ID do processo (PID). Por exemplo, use
pgrep
oups
e entãokill
:fonte
Z
) estado Neste caso, não pode lidar com sinais de mais..)Se Ctrl+ C(SIGINT) não funcionar, tente Ctrl+ \(SIGQUIT). Em seguida, tente Ctrl+ Z(SIGTSTP). Se você retornar a um prompt do shell, faça
kill
o ID do processo. (O padrão é o sinal SIGTERM, que você pode especificarkill -TERM
. Em alguns shells, você pode usar%1
o PID.) Se isso não funcionar, vá para outro terminal ou sessão SSH e façakill
oukill -TERM
no ID do processo. Somente como último recurso , vocêkill -KILL
também devekill -9
, como não dá ao processo a chance de abortar de maneira limpa, sincronizar seus arquivos abertos, remover seus arquivos temporários, fechar conexões de rede etc.fonte
Pressione Ctrl-Z para suspender o programa e colocá-lo em segundo plano :
(Restaurar para o primeiro plano novamente usando
fg
)Depois, você pode
kill
oukill -9
que, dada a sua ID do processo (você conseguir que a partirps a
).fonte
kill $!
, como$!
é uma variável especial que contém o pid do último programa em segundo plano.bg
uma vez antes que a variável obtenha um valor atribuído.bg
que, após Ctrl + Z, ele é simplesmente suspenso.ps
saída (oukillall
) é bastante arriscado se você tiver vários processos com o mesmo nome em execução.ps -e -o pid,command
fornecerá argumentos pid + completos, não apenas o nome do programa, mas novamente pode não ser suficiente para discriminar. Em contraste,$!
é um sucesso garantido.ps a
meu sistema:27721 s000 T 0:00.09 top
QuantasT
instâncias suspensas ( acho) do mesmo comando (top
) você está executando no mesmo tty (s000
)?Veja este link também.
Ctrl+ Z: pausa um processo.
Ctrl+ C: peça educadamente que o processo seja encerrado agora.
Ctrl+ \: elimina impiedosamente o processo que está atualmente em primeiro plano
fonte
"ctrl"
+"\"
não funcionou para mimNormalmente, você ainda pode parar o processo ( Ctrl+ Z) e usá-lo
kill -9
. Parakill -9
, você precisa primeiro do processo PID . Para trabalhos em segundo plano,kill -9 %1
é a maneira mais fácil de fazer isso - se você não tiver certeza de qual é o número de trabalhos em segundo plano que deseja matar, executejobs
.Como alternativa, você pode encontrar o ID do processo com
Então você pode correr
fonte
Uma solução mais simples para o Bash (e outras conchas?) É:
onde '% 1' refere-se ao número do trabalho que está sendo morto. Pode ser '% 2' (ou qualquer outra coisa) se você já tiver outros empregos dormindo. Você pode ver qual é o número do trabalho quando pressiona Ctrl-z:
Note que 'kill' é a versão do shell de kill, não / bin / kill.
fonte
1) Se você estiver no console e no modo multiusuário, pressione CTRL-ALT-Fn e faça login em outra tela, use
ps -ef | grep <myprocessname>
oupidof <myprocessname>
e, em seguida, mate -9 o processo pelo número de identificação.2) Se você estiver conectado remotamente, faça o mesmo em outra sessão do terminal.
Você também pode facilitar a vida instalando o htop , que é uma versão mais versátil do top que permite eliminar seletivamente os processos em execução. A maioria das distros possui htop em um repositório.
3) se você está apenas preso em uma sessão ssh travada (para outro sistema, por exemplo), tente pressionar til (~), que é a tecla de escape, e pressione CTRL-Z para retornar à sessão do host. pode matar o processo ssh preso ou aguardar o tempo limite, o que a maioria ainda faz após um período de inatividade.
fonte
Se você estiver usando tmux ou screen, e nenhuma das opções acima funcionar, você ainda pode matar o painel
<prefix> x
, então o processo também é eliminado.fonte
Talvez haja uma armadilha definida com SIGINT (2) no seu / etc / profile. Se sim, remova-o. Saia e faça login novamente, e você deve ser bom.
fonte