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?

Ken
fonte
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
2
Forçar oSIGTERM
Blacklight Shining

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.

CajunLuke
fonte
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.

Lri
fonte
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.

TheKarateKid
fonte
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.

jm666
fonte
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

Brock Vond
fonte