Bagaimana cara membunuh proses windows di terminal cygwin?

18

Saya memiliki masalah tentang cara mematikan proses di Cygwin di Windows. Saya benar-benar baru di Cygwin. Tapi aku punya tugas yang tidak bisa kubunuh. Saya telah mencoba mengeluarkan perintah berikut:

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

Saya telah mengeluarkan perintah di terminal Cygwin terpisah karena saya tidak dapat Ctrl + C di terminal Cygwin tempat proses berjalan. Saya telah mencari di internet tanpa hasil.

pengguna1093774
sumber
Apa proses yang Anda mulai, dan bagaimana Anda memulainya?
me_and

Jawaban:

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

Atau

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

Atau

powershell kill -n calc
Steven Penny
sumber
Anda mungkin ingin menggunakan ps -W | awk 'BEGIN{ IGNORECASE=1;} /calc.exe/,NF=1' | xargs kill -fkarena Windows case-insensitive
tricasse
7

Anda dapat mencoba:

taskkill /pid 4568
aggu
sumber
taskkill /im:{name-of-executable}Bermanfaat juga.
LawrenceC
dan taskkill /im <name-of-exe> /fbahkan lebih bermanfaat.
Erik Kaplun
1
Jawaban buruk, OP meminta perintah Cygwin.
Hashim
1
Ini taskkill //im <name-of-exe>(perhatikan perlunya 2 tebasan)
P.Brian.Mackey
5

Jika Anda menginginkan solusi BASH only, coba ini: (ini berfungsi untuk saya)

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

CATATAN: gunakan / bin / kill, shell kill yang tertanam tidak akan membunuh PID untuk proses windows umum.

dpminusa
sumber
Catatan Anda tentang / bin / kill vs shell kill sangat berguna. Terima kasih
Phil
2

(Dari jawaban saya ke pertanyaan serupa pada SO ):

Program Windows yang berbeda akan menangani sinyal yang membunuh pengiriman secara berbeda; mereka tidak pernah dirancang untuk menghadapinya dengan cara yang sama seperti program Linux / Cygwin.

Satu-satunya metode yang dapat diandalkan untuk membunuh program Windows adalah dengan menggunakan alat khusus Windows, seperti Task Manager atau Process Explorer.

Yang mengatakan, jika Anda belum melakukannya, Anda mungkin beruntung dengan menjalankan terminal Cygwin Anda dalam mode administrator (klik kanan pada shortcut Anda dan pilih "Run as administrator").

saya dan
sumber
1

Dua hal untuk dipikirkan di sini:

  1. Dapatkan PID yang benar, yaitu WINPID.
  2. Gunakan alat yang tepat.

Untuk mendapatkan WINPID yang benar untuk dibunuh, gunakan cat /proc/<PID>/winpid. Yaitu menjalankan ini:

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

dan segera setelah melakukan yang lain ps .

Alat yang tepat untuk digunakan adalah sysinternals PsKill64.exe -t <winpid> yang juga membunuh semua turunan dari proses skrip, yang killtidak.

not2qubit
sumber
1
Anda punya suara untuk cat /proc/${ZID}/winpid, sangat baik untuk tahu. Dan lebih cepat daripada solusi dengan ps -aW | grep ..., setidaknya pada cygwin saya di bawah Win 7 x64. Tetapi untuk PsKill64 saya pikir Anda perlu -tmembunuh sub proses, dan taskkilljuga dapat membunuh subproses.
244an
Ya, Anda juga perlu -tmembunuh keturunan. Jawaban yang benar.
not2qubit
0

Jika Anda memiliki program Windows yang merupakan sub proses bawah proses bash cygwin Anda dapat menggunakan taskkill /F /PID [the cygwin process id] /Tuntuk membunuh pohon proses, tidak perlu untuk mendapatkan Window PID dari psdengan awkdll
ini diuji di bawah Win7 x64.

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

Tentu saja Anda dapat menggunakan Window PID juga.

244an
sumber
0

Di Git Bash saya menggunakan:

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

Saya belum mencobanya di Cygwin, tetapi saya kira itu akan berhasil di sana juga.

Vagelis Prokopiou
sumber