Eu sei que há ctrl+ c, mas às vezes isso não funciona. Na área de trabalho do Ubuntu, basta fechar a janela do terminal e abrir uma nova quando isso acontecer, mas como isso seria resolvido usando a CLI no servidor Ubuntu (sem reiniciar a caixa)?
server
command-line
CrazeD
fonte
fonte
Respostas:
CTRL+Cenviará
SIGINT
para o aplicativo. O aplicativo pode configurar um manipulador para esse sinal ou pode ignorá-lo. Por padrão, não há manipulador eSIGINT
matará o aplicativo.Você pode usar o CTRL+\que irá enviar
SIGQUIT
. Isso também gerará um core dump se o limite do core não for zero.Você pode suspender o processo e retornar ao shell com CTRL+Z, isso interromperá a execução do processo e retornará ao prompt do shell. O processo estará na memória e estará disponível como um trabalho no shell atual. Você pode usar
kill -SIGNAL %%
oukill -SIGNAL %<job_ID>
enviar um sinal para esse trabalho. Por exemplo, para matar o último empregokill -9 %%
Se nenhum deles estiver funcionando, você sempre poderá enviar
SIGTERM
, como último recurso, oSIGKILL
que encerrará qualquer processo. Este sinal como qualquer outro sinal deve ser enviado como o mesmo usuário que o processo que você está tentando parar ou como raiz. Para enviarSIGKILL
para o processo, primeiro localize o processo comps aux
oups -edf
, em seguidakill -SIGKILL <process_ID>
, execute , onde<process_ID>
é aPID
coluna naps
saída.Os sinais não podem ser entregues se o processo estiver em uma chamada ininterrupta. Chamadas ininterruptas são funções do kernel que não podem ser paradas e geralmente acontecem devido a um driver incorreto (por exemplo, um driver que não é reentrante ). Um processo que está em suspensão ininterrupta não pode ser parado até que a chamada seja concluída ou o servidor seja reiniciado.
Se um processo se tornar um zumbi , ele não usará nenhum recurso, apenas ocupando espaço na tabela de processos. Um processo de zumbi não pode receber sinais.
A lista de sinais para a arquitetura atual pode ser encontrada em
kill -l
Veja as páginas de manual de
kill
,ps
ebash
. Para ver uma página de manual, use algo como:man ps
fonte
Se você tiver acesso total ao console, poderá fazê-lo Alt- F1..12e obter um novo console.
A partir daí, você pode fazer uma lista de processos da seguinte maneira:
Em seguida, faça um
kill
no ID do processo:Se você não tiver acesso total ao console, basta abrir outra janela do terminal (talvez via PuTTY ou similar) e faça a lista de processos acima e elimine as etapas.
fonte
Ctrl C envia um SIGINT ao seu processo em execução. Se você não deseja abrir outro console, pode enviar um SIGQUIT com Ctrl \. Isso abordará a maioria dos aplicativos desligados do dia a dia que o SIGINT não.
Pessoalmente, eu queria uma maneira de enviar um SIGKILL com um atalho, mas não conheço uma maneira de fazê-lo.
fonte
Considero
pgrep
e soupkill
mais fácil de usar do quekill
com um ID de processo explícito.Além disso, em vez de começar com o sinal 9 (SIGKILL), considere começar com o SIGTERM padrão (15). Isso dará ao processo a chance de terminar normalmente (se possível).
pkill -15 thing
epkill thing
deve ser equivalente.Aqui está como isso funcionaria. Digamos que o ntpd esteja travado.
Quais são os processos? (Você pode pular para pkill se acreditar que não terá falsos positivos).
Mate os processos:
Use
pgrep
novamente para ver se foi bem-sucedido.Caso contrário, vá para
pkill -9
.fonte
Você mudaria para um novo terminal, encontraria o PID do processo travado (usando
ps
) e depoiskill
o mataria. Eu usaria primeirokill (PID)
. Se isso não funcionar, eu usariakill -9 (PID)
. Se isso não interromper o processo, a máquina precisará ser reinicializada.fonte
Cntrl+ \trabalhou para mim (onde Cntrl+ cou znão funcionou)
fonte