Existe algo mais forte do que "Force Quit"?


24

Eu tenho um aplicativo que não morre: saiu da estação, mas a janela permanece (com uma bola de praia, se eu passar o mouse sobre ela). Não está usando CPU, mas quero que desapareça.

Existe algo mais forte do que "Force Quit" para realmente matar um aplicativo?


Não tenho certeza se é mais forte, mas tente Aplicativos> Utilitários> Monitor de Atividade. Encontre o processo e Force Quit. Se isso não funcionar, anote o número do processo, vá para o Terminal e digite "kill #" onde # é o número do processo. HTH
— David DelMonte

6
o botão liga / desliga?
— Daniel

1
@DanielLawson Infelizmente, essas situações geralmente resultam nisso.
— CajunLuke 20/09/12

1
David: Eu suponho que o que a Apple chama de "Force Quit" seja o mesmo, não importa como você o faça, mas eu tentei isso também, sem efeito.
— Ken

Respostas:


14

Se você souber o nome do aplicativo, poderá fazer o check-in no Activity Monitor para ver se ele ainda está em execução e tentar forçar o encerramento. Se isso não funcionar, anote o ID do processo do aplicativo (pid). Vá para o terminal e digite kill [pid], substituindo "[pid]" pelo número que você anotou anteriormente. Se isso não funcionar, tente kill -3 [pid]e se isso não funcionar kill -9 [pid]. Se o processo é de propriedade de um usuário diferente (isto não é provável), você pode precisar de substituir killcom sudo kille digite sua senha quando solicitado.

Se o aplicativo não aparecer no Activity Monitor ou você não killconseguir, a janela poderá ficar em outro lugar e o aplicativo simplesmente não estará mais em execução. Nesse caso, às vezes (nem sempre) ele pode funcionar para killall SystemUIServerou killall Dock.

Se nada disso funcionar, você precisará fazer logoff e entrar novamente ou reiniciar. Nas poucas vezes em que cheguei a esse ponto, o aplicativo ficou tão travado que impediu o logout ou o desligamento, por isso tive que reiniciar com força.


Eu tentei tudo isso (incluindo sudo, mesmo que o processo seja de minha propriedade), sem alterações. Afetará killall SystemUIServerqualquer um dos meus outros aplicativos abertos, como esquecer as posições da janela?
— Ken

2
gentmatt: De acordo com kill -l, -3 é SIGQUIT e -9 é SIGKILL ("matança não capturável e não ignorável").
— Ken

1
@gentmatt 3 é o sinal QUIT que permite ao processo interceptar o sinal e executar a limpeza. 9 é KILL é "não alcançável e não ignorável". Há uma pilha de outros sinais que você pode enviar; execute man kill(que está entre os 10 melhores comandos UNIX de todos os tempos) para ver todos eles.
— CajunLuke 20/09/12

1
Normalmente eu mato -9. -3 não é mais forte que "Force Quit"
— segfault

3
@BoTian True; Eu pulo direto para -9. Às vezes eu não me importo com o Force Quit. Mas para um usuário que não sabe o que está fazendo, pode funcionar e é menos provável que seja prejudicial. Também não leva muito tempo, portanto o tempo gasto com a taxa de resultado esperado não é tão ruim assim.
— CajunLuke 20/09/12

7

A janela de saída forçada,, killalle killtodos os processos enviam sinais TERM por padrão. Você pode usar killall -killse isso não funcionar.

O utilitário killall mata processos selecionados por nome, em oposição à seleção por pid e feita por kill (1). Por padrão, ele envia um sinal TERM para todos os processos com um UID real idêntico ao chamador de killall que corresponde ao nome procname. O superusuário pode matar qualquer processo.

Se você executar sudo dtrace -n 'proc:::signal-send /pid/ { printf("%s -%d %d",execname,args[2],args[1]->pr_pid); }'e sair de algum aplicativo a partir da janela de encerramento forçado, o sinal geralmente é mostrado como -15 (TERM). Mas quando você encerra um processo em segundo plano (ou um aplicativo que não é mostrado no Dock) do Activity Monitor, o sinal geralmente é mostrado como -9 (KILL).

SIGTERM é o sinal padrão enviado a um processo pelos comandos kill ou killall. Isso causa o término de um processo, mas, diferentemente do sinal SIGKILL, ele pode ser capturado e interpretado (ou ignorado) pelo processo. Portanto, o SIGTERM é semelhante a solicitar que um processo seja finalizado corretamente, permitindo a limpeza e o fechamento de arquivos. Por esse motivo, em muitos sistemas Unix durante o desligamento, o init emite o SIGTERM para todos os processos que não são essenciais para desligar, aguarda alguns segundos e, em seguida, emite o SIGKILL para forçar o encerramento dos processos restantes.


Algumas informações boas aqui, mas nenhuma dessas variantes de matar o processo parece ter algum efeito sobre ele.
— Ken

Se nem SIGKILLfuncionar, o aplicativo provavelmente está em suspensão ininterrupta e não há realmente nada que você possa fazer (exceto reiniciar).
— Blacklight Shining

Também estou imaginando se esse era um aplicativo de usuário, como mail.app ou pages.app ou se, de alguma forma, era um processo do sistema, como o Spotlight, ou um processo em segundo plano do aplicativo, como o Plex (que eu tenho problemas para remover).
— precisa

6

Eu tive situações em que o Force Quit, o Activity Monitor kille outros métodos não funcionaram, e meu Mac não pôde desligar por causa disso.

Nesse caso, sudo shutdown -r nowfuncionou quando nada mais funcionaria, e provavelmente é melhor do que fazer um desligamento forçado através do botão liga / desliga.


1

Como nas respostas acima, a maneira mais forte de encerrar qualquer processo é SIGKILL, por exemplo kill -9 process_id.

No entanto, existem processos que são simplesmente impossíveis de Force Quitnem kill. Eles chamaram de zombieprocessos.

Aqui está um script curto que criará um zombieprocesso por dois minutos:

perl -e 'if($p=fork) {print "unkillable pid:$p\n" ;system("ps -l"); sleep(120)}'

Execute o script acima no Terminal e você obterá a saída, como a seguir:

     unkillable pid:50571
        UID   PID  PPID        F CPU PRI NI       SZ    RSS WCHAN     S             ADDR TTY           TIME CMD
        501 47380 47379     4006   0  31  0  2448416   2900 -      S                   0 ttys000    0:00.36 -bash
        501 50570 47380     4006   0  31  0  2443512   1424 -      S+                  0 ttys000    0:00.01 perl -e if($p=fork) {print "u
#THIS-> 501 50571 50570     2006   0   0  0        0      0 -      Z+                  0 ttys000    0:00.00 (perl)
        501 12795 12794     4006   0  31  0  2448296   1752 -      S+                  0 ttys001    0:00.75 -bash
        501 50123 50122     4006   0  31  0  2448296   2688 -      S+                  0 ttys002    0:00.14 -bash

Se você verificar a coluna de status quanto ao processo inábil (neste caso: 50571), verá o Zsinalizador, o que significa zombie.

Você pode tentar enviar qualquer killsinal (por exemplo kill -9 50571) e o processo ainda existe. De qualquer forma, não prejudica muito o seu sistema, porque na verdade não existe - apenas ocupa a tabela de processos.

No exemplo acima, em 120 segundos, ele será limpo.


0

Isto é o que você deve fazer:

  1. No Monitor de atividades, clique duas vezes no processo OU clique no ícone Informações para abrir a janela do processo.
  2. Você verá o # do processo na linha do Grupo de Processos como processName (####) em que "####" é o número do seu processo.
  3. Abra o terminal e digite "sudo kill ####" sem as aspas e pressione enter
  4. Digite sua senha, o terminal não mostrará sua entrada aqui
  5. Processo está morto.

Um processo como esse é melhor removido em modo de segurança se você tentar desinstalar.

Cheers, Bryan

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.