Bir cygwin terminalinde bir Windows işlemi nasıl öldürülür?


18

Windows'da Cygwin'de bir işlemi nasıl öldüreceğimle ilgili bir sorunum var. Cygwin için tamamen yeniyim. Ama öldüremediğim bir görevim var. Aşağıdaki komutları vermeye çalıştım:

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

Komutları ayrı bir Cygwin terminalinde verdim çünkü işlemin çalıştığı Cygwin terminalinde Ctrl + C yapamıyorum. İnternette başarı olmadan arama yaptım.


Başladığınız süreç nedir ve nasıl başladınız?
me_and

Yanıtlar:


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

Veya

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

Veya

powershell kill -n calc

ps -W | awk 'BEGIN{ IGNORECASE=1;} /calc.exe/,NF=1' | xargs kill -fWindows büyük / küçük harfe duyarlı olmadığından kullanmak isteyebilirsiniz
tricasse

7

Deneyebilirsiniz:

taskkill /pid 4568

taskkill /im:{name-of-executable}de faydalıdır.
LawrenceC

ve taskkill /im <name-of-exe> /fdaha da kullanışlı.
Erik Kaplun

1
Kötü cevap, OP bir Cygwin komutu istedi.
Hashim

1
It adlı taskkill //im <name-of-exe>(not 2 eğik çizgi ihtiyacı)
P.Brian.Mackey

5

Sadece bir BASH çözümü istiyorsanız, şunu deneyin: (benim için çalışıyor)

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

NOT: / bin / kill kullanın, katıştırılmış kabuk öldürme genel windows işlemleri için PID'leri öldürmez.


/ Bin / kill vs shell kill ile ilgili notunuz çok faydalı oldu. Teşekkürler
Phil

2

(Dan Cevabıma a SO benzer soru ):

Farklı Windows programları farklı gönderimleri öldüren sinyalleri işleyecek; Linux / Cygwin programlarıyla aynı şekilde başa çıkmak için tasarlanmamışlardır.

Bir Windows programını öldürmek için tek güvenilir yöntem, Görev Yöneticisi veya İşlem Gezgini gibi Windows'a özgü bir araç kullanmaktır.

Bununla birlikte, henüz yapmadıysanız, Cygwin terminalinizi yönetici modunda çalıştırma şansınız olabilir (kısayolunuza sağ tıklayın ve "Yönetici olarak çalıştır" ı seçin).


1

Burada düşünmeniz gereken iki şey:

  1. WINPID olan doğru PID'yi alın.
  2. Doğru aleti kullanın.

Öldürmek için doğru WINPID'i almak için kullanın cat /proc/<PID>/winpid. Yani şunu çalıştırın:

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

ve hemen sonra başka bir tane yapın ps.

Kullanılacak doğru araç , betik işleminin tüm torunlarını da öldüren sysinternals'tır PsKill64.exe -t <winpid> , ki killbu da değil.


1
Oyunuz var cat /proc/${ZID}/winpid, bilmek çok güzel. Ve çözümden daha hızlı ps -aW | grep ..., en azından Win 7 x64 altındaki cygwin'imde. Ancak PsKill64 için -talt süreçleri ve alt süreçleri taskkillde öldürmeniz gerektiğini düşünüyorum .
244an

Evet, -ttorunları öldürmek için de ihtiyacınız var . Cevap düzeltildi.
not2qubit

0

Eğer kullanabileceğiniz bir cygwin bash süreci kapsamında bir alt işlemi olan bir Windows programı varsa taskkill /F /PID [the cygwin process id] /T, gelen Pencere PID almak gerek süreç ağacı öldürmek psile awkvs
Bu Win7 x64 altında test edilir.

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

Tabii ki Pencere PID'sini de kullanabilirsiniz.


0

Git Bash'de şunu kullanıyorum:

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

Cygwin'de denemedim, ama sanırım orada da çalışacak.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.