วิธีการฆ่ากระบวนการ windows ใน terminal cygwin?


18

ฉันมีปัญหาเกี่ยวกับวิธีการฆ่ากระบวนการใน Cygwin บน Windows ฉันยังใหม่กับ Cygwin อย่างสมบูรณ์ แต่ฉันมีภารกิจที่ฉันไม่สามารถฆ่าได้ ฉันได้ลองใช้คำสั่งต่อไปนี้:

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

ฉันได้ออกคำสั่งในเทอร์มินัล Cygwin แยกกันเนื่องจากฉันไม่สามารถ Ctrl + C ในเทอร์มินัล Cygwin ที่กระบวนการทำงาน ฉันค้นหาทั่วอินเทอร์เน็ตโดยไม่ประสบความสำเร็จ


กระบวนการเริ่มต้นของคุณคืออะไรและคุณเริ่มต้นอย่างไร
me_and

คำตอบ:


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

หรือ

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

หรือ

powershell kill -n calc

คุณอาจต้องการใช้ps -W | awk 'BEGIN{ IGNORECASE=1;} /calc.exe/,NF=1' | xargs kill -fเพราะ Windows ไม่คำนึงถึงขนาดตัวพิมพ์
tricasse

7

คุณอาจลอง:

taskkill /pid 4568

taskkill /im:{name-of-executable}มีประโยชน์เช่นกัน
LawrenceC

และtaskkill /im <name-of-exe> /fมีประโยชน์มากยิ่งขึ้น
Erik Kaplun

1
คำตอบที่ไม่ถูกต้อง OP ขอคำสั่ง Cygwin
Hashim

1
มันเป็นtaskkill //im <name-of-exe>(โปรดทราบความจำเป็นในการ 2 สแลช)
P.Brian.Mackey

5

หากคุณต้องการวิธีการแก้ปัญหา BASH เพียงลองนี้: (มันใช้งานได้สำหรับฉัน)

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

หมายเหตุ: ใช้ / bin / kill, shell kill ที่ฝังตัวจะไม่ฆ่า PID สำหรับหน้าต่างทั่วไป


บันทึกย่อของคุณเกี่ยวกับ / bin / kill vs shell kill มีประโยชน์มาก ขอบคุณ
ฟิล

2

(จากคำตอบของฉันไปยังคำถามที่คล้ายกันใน SO ):

โปรแกรม Windows ต่าง ๆ จะจัดการกับสัญญาณที่ kill ส่งแตกต่างกัน พวกเขาไม่เคยออกแบบมาเพื่อจัดการกับพวกเขาในลักษณะเดียวกับที่โปรแกรม Linux / Cygwin เป็น

วิธีการเดียวที่เชื่อถือได้สำหรับการฆ่าโปรแกรม Windows คือการใช้เครื่องมือเฉพาะของ Windows เช่นตัวจัดการงานหรือกระบวนการ Explorer

ที่กล่าวว่าหากคุณยังไม่ได้ดำเนินการคุณอาจโชคดีที่ได้ใช้งานเทอร์มินัล Cygwin ในโหมดผู้ดูแลระบบ (คลิกขวาที่ทางลัดแล้วเลือก "Run as administrator")


1

สองสิ่งที่ควรคิดเกี่ยวกับที่นี่:

  1. รับ PID ที่ถูกต้องซึ่งเป็น WINPID
  2. ใช้เครื่องมือที่เหมาะสม

เพื่อให้ได้ถูกต้อง WINPID cat /proc/<PID>/winpidการฆ่าการใช้งาน เช่นนี้

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

psและทันทีหลังจากทำอีก

เครื่องมือที่เหมาะสมในการใช้คือsysinternals PsKill64.exe -t <winpid>ซึ่งฆ่าลูกหลานทั้งหมดของกระบวนการสคริปต์ซึ่งkillไม่ได้


1
คุณได้รับการโหวตcat /proc/${ZID}/winpidดีมากที่รู้ และเร็วกว่าวิธีแก้ปัญหาด้วยps -aW | grep ...อย่างน้อยก็ใน cygwin ของฉันภายใต้ Win 7 x64 แต่สำหรับ PsKill64 ฉันคิดว่าคุณต้อง-tฆ่ากระบวนการย่อยและtaskkillยังสามารถฆ่ากระบวนการย่อยได้
244an

ใช่คุณต้อง-tฆ่าลูกหลานด้วย คำตอบที่ถูกต้อง
not2qubit

0

หากคุณมีโปรแกรม Windows ที่เป็นกระบวนการย่อยภายใต้กระบวนการทุบตี cygwin คุณสามารถใช้taskkill /F /PID [the cygwin process id] /Tเพื่อฆ่าแผนผังกระบวนการไม่จำเป็นต้องได้รับ Window PID จากpsด้วยawkเป็นต้น
ซึ่งผ่านการทดสอบภายใต้ Win7 x64

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

แน่นอนคุณสามารถใช้ Window PID ได้เช่นกัน


0

ใน Git Bash ฉันใช้:

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

ฉันไม่ได้ลองใน Cygwin แต่ฉันคิดว่ามันจะใช้ได้เหมือนกัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.