Como matar um processo do Windows em um terminal cygwin?


18

Eu tenho um problema sobre como matar um processo no Cygwin no Windows. Eu sou completamente novo em Cygwin. Mas tenho uma tarefa que simplesmente não consigo matar. Eu tentei emitir os seguintes comandos:

kill 4568
kill -9 4568
/bin/kill -f 4568

Emiti os comandos em um terminal Cygwin separado, pois não posso pressioná-lo com Ctrl + C no terminal Cygwin, onde o processo é executado. Eu procurei por toda a internet sem sucesso.


Qual foi o processo que você iniciou e como você o iniciou?
me_and 01/06/12

Respostas:


25
ps -W | awk '/calc.exe/,NF=1' | xargs kill -f

Ou

ps -W | awk '$0~v,NF=1' v=calc.exe | xargs kill -f

Ou

powershell kill -n calc

Você pode querer usar ps -W | awk 'BEGIN{ IGNORECASE=1;} /calc.exe/,NF=1' | xargs kill -fporque o Windows é case-insensitive
tricasse

7

Você pode tentar:

taskkill /pid 4568

taskkill /im:{name-of-executable}é útil também.
LawrenceC

e taskkill /im <name-of-exe> /fé ainda mais útil.
Erik Kaplun

1
Má resposta, o OP pediu um comando Cygwin.
Hashim

1
É taskkill //im <name-of-exe>(note a necessidade de 2 barras)
P.Brian.Mackey

5

Se você deseja uma solução apenas BASH, tente o seguinte: (funciona para mim)

    KILLPS="<My Process Name>"
    WINPS=`ps -W | grep -i $KILLPS`         # Make case-insensitive.
    PID=`echo $WINPS | cut -d' ' -f1` 
    /bin/kill -f "$PID"

NOTA: use / bin / kill, o shell kill incorporado não matará PIDs para processos gerais do Windows.


Sua observação sobre / bin / kill vs shell kill foi muito útil. Obrigado
Phil

2

(Da minha resposta a uma pergunta semelhante sobre SO ):

Programas diferentes do Windows manipularão os sinais que eliminam os envios de maneira diferente; eles nunca foram projetados para lidar com eles da mesma maneira que os programas Linux / Cygwin.

O único método confiável para matar um programa do Windows é usar uma ferramenta específica do Windows, como o Gerenciador de Tarefas ou o Process Explorer.

Dito isto, se você ainda não o fez, pode ter sorte em executar o terminal Cygwin no modo de administrador (clique com o botão direito do mouse no atalho e selecione "Executar como administrador").


1

Duas coisas para pensar aqui:

  1. Obtenha o PID correto, que é o WINPID.
  2. Use a ferramenta certa.

Para obter o WINPID correto para matar, use cat /proc/<PID>/winpid. Ou seja, execute isso:

ZID=$$; WINPID=$(cat /proc/${ZID}/winpid); echo "Kill WINPID: ${WINPID}"; ps; sleep 10 &

e imediatamente depois de fazer outro ps.

A ferramenta certa a ser usada é o sysinternals, PsKill64.exe -t <winpid> que também mata todos os descendentes do processo de script, o que killnão acontece.


1
Você tem um voto cat /proc/${ZID}/winpid, muito bom saber. E mais rápido que a solução ps -aW | grep ..., pelo menos no meu cygwin no Windows 7 x64. Mas, para o PsKill64, acho que você precisa -tmatar subprocessos e taskkilltambém pode matar subprocessos.
244

Sim, você também precisa -tmatar descendentes. Resposta corrigida.
not2qubit

0

Se você possui um programa do Windows que é um subprocesso em um processo de cygwin bash, pode usar taskkill /F /PID [the cygwin process id] /Tpara matar a árvore de processos, não é necessário obter o PID do Windows pscom awketc.
Isso é testado no Win7 x64.

# Simple example in cygwin:
> notepad.exe &
> pid=$!
...
> taskkill /F /PID $pid /T

Claro que você também pode usar o PID do Windows.


0

No Git Bash eu uso:

targetProcess='chromedriver.exe';
ps -W | grep -i ${targetProcess} | awk '{print $1}' | while read pid; do taskkill //PID ${pid}; done;

Eu não tentei em Cygwin, mas acho que funcionará lá também.

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.