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.

user1093774
fonte
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
Steven Penny
fonte
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
aggu
fonte
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.

dpminusa
fonte
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").

eu e
fonte
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.

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

244an
fonte
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.

Vagelis Prokopiou
fonte