Saia do Google Chrome do terminal

28

Existe uma maneira de causar google-chromea saída, do terminal, além de usar killall google-chrome?
Eu gostaria de poder fechá-lo de um script sem matá-lo.

slybloty
fonte
2
O que há de errado com matar?
Zoredache
1
@ Zoredache Isso resulta em um comportamento diferente de sair e que o Chrome usa vários processos, um dos quais (a sandbox) é a raiz do setuid.
Gilles 'SO- stop be evil'

Respostas:

12

Talvez wmctrlpossa ser de alguma ajuda. Você pode usar a -copção que fecha uma janela normalmente:

wmctrl -c chrome

A sequência chromeé comparada com os títulos da janela. Observe que a janela pode não fechar se alguma mensagem aparecer (por exemplo, quando você tiver várias guias abertas).

Baldrick
fonte
1
Esta opção funciona perfeitamente, mas exigiu a instalação de wmctrl.
slybloty
O wmctrl não pode fechar a bandeja do sistema "Chrome Apps". pkill -o chromefaz embora.
Ken Sharp
26

Este comando sai da árvore de processos do chrome normalmente, em todos os gerenciadores de janelas:

pkill --oldest chrome

ou se você preferir:

/usr/bin/pkill --oldest --signal TERM -f chrome    

Detalhes:

  • significa normalmente: evite ver "O Google Chrome não foi desligado corretamente. Para reavaliar ... ”da próxima vez que o chrome for iniciado
  • navegador Chrome (por exemplo, versão 39.0.2171.95) intercepta e manipula normalmente SIGTERM
  • sinalizar um único processo, a raiz da árvore de processos do chrome, --oldest
  • SIGTERMé o mesmo que sinal 15, portanto --signal TERM, ou simplesmente deixe de fora, pois SIGTERMé o sinal padrão
  • wmctrl funciona com o Unity e alguns outros, mas não funciona com todos os gerenciadores de janelas
  • wmctrl -c fecha uma janela de cada vez, para fechar todas as janelas cromadas, você precisa de algo como while wmctrl -c 'Google Chrome'; do sleep 0.2; done
Keith Cascio
fonte
1
Suponho que estou usando uma versão antiga do pkill, pois --oldestnão é uma opção: usar o -oworks.
Ken afiada
o -fargumento para pkill não está funcionando para mim. Eu tenho alguns outros processos em execução como root, que possuem a palavra chrome em suas linhas de comando; portanto, apenas recebo permissão negada. Sem o -f, ele funciona perfeitamente embora.
Brian Minton
Isso ainda me faz ver 'não foi encerrado corrently'
xtrinch
No Ubuntu 18.04, como eu poderia fazer isso ser executado imediatamente após acionar uma reinicialização ou um desligamento ?.
Jaime Hablutzel
1

Isso funciona para mim:

killall --quiet --signal 15 -- chrome

Observe que estou usando um comando bastante detalhado para mantê-lo legível no código, é claro que você também pode emitir:

killall -q -15 chrome
Triturador de Carne
fonte
1

Em Mac OS X, use isso em vez

pkill -a -i "Google Chrome"

O que ele faz é procurar um processo do Google Chrome e matar todos os seus processos-pai também.

Do manual pkill

    -a          Include process ancestors in the match list.  By default, the
                current pgrep or pkill process and all of its ancestors are
                excluded (unless -v is used).
    -i          Ignore case distinctions in both the process table and the
                supplied pattern.

De acordo com a resposta de @ keith-cascio , você pode tentar matar o processo mais antigo. Observe que isso não funcionou para mim.

pkill -o -i "Google Chrome"
hanxue
fonte
0

experimentar:

kill -3 <pid_of_chrome>

Isso enviará um sinal de "QUIT" para o chrome, que, dependendo do gerenciador de janelas, será o que normalmente é enviado quando solicitado a fechar.

Blackle Mori
fonte
2
Isso funciona exatamente como killou killallonde o Chrome o vê como uma falha e pede para restaurar.
slybloty
1
tente 15 em vez de 3, então
Blackle Mori
6
Na verdade, SIGQUITgeralmente não é enviado aos aplicativos quando solicitado a fechar (não conheço nenhum WMs que faça isso). WM_DELETE_WINDOWé o padrão.
31412 Chris Down
2
@ blacklemon67 kill -15 <pid_of_chrome>fez o que eu estava procurando. Mas, google-chrometem vários pids e foram necessários alguns para realmente conseguir o caminho certo.
slybloty