มีอะไรที่แข็งแกร่งกว่า "Force Quit" หรือไม่?


24

ฉันมีแอพที่จะไม่ตาย: มันหายไปจากท่าเรือ แต่หน้าต่างยังคงอยู่ (มีลูกบอลชายหาดถ้าฉันเลื่อนเมาส์ไป) มันใช้ซีพียูไม่ได้ แต่ฉันอยากให้มันหายไป

มีบางอย่างที่แข็งแกร่งกว่า "Force Quit" เพื่อฆ่าแอปจริงๆหรือไม่?


ฉันไม่แน่ใจว่ามันแข็งแกร่งขึ้นหรือไม่ลองใช้แอป> ยูทิลิตี้> การตรวจสอบกิจกรรม ค้นหากระบวนการและ Force Quit หากไม่ได้ผลให้จดบันทึกหมายเลขกระบวนการไปที่ Terminal และพิมพ์ "kill #" โดยที่ # คือหมายเลขกระบวนการ HTH
David DelMonte

6
ปุ่มเปิดปิด
แดเนียล

1
@DanielLawson น่าเสียดายที่สถานการณ์เหล่านี้มักจะส่งผลให้
CajunLuke

1
เดวิด: ฉันคิดว่าสิ่งที่ Apple เรียกว่า "Force Quit" นั้นเหมือนกันไม่ว่าคุณจะไปทางไหน แต่ฉันก็ลองเช่นกันโดยไม่มีผลกระทบ
Ken

คำตอบ:


14

หากคุณรู้ชื่อของแอพคุณสามารถเช็คอิน Activity Monitor เพื่อดูว่ามันยังทำงานอยู่หรือไม่และลองใช้ Force Quit หากไม่ได้ผลให้จด ID กระบวนการของแอป (pid) ไปที่เทอร์มินัลแล้วพิมพ์kill [pid]แทน "[pid]" ด้วยหมายเลขที่คุณจดบันทึกไว้ก่อนหน้านี้ หากไม่ได้ผลลองและถ้าไม่ได้ทำงานkill -3 [pid] kill -9 [pid]หากผู้ใช้รายอื่นเป็นเจ้าของกระบวนการนี้ (อาจไม่น่าเป็นไปได้) คุณอาจจำเป็นต้องแทนที่killด้วยsudo killและพิมพ์รหัสผ่านของคุณเมื่อได้รับแจ้ง

หากแอพไม่ปรากฏใน Activity Monitor หรือไม่สามารถทำได้killหน้าต่างอาจติดค้างอยู่ที่อื่นและแอปไม่ทำงานอีกต่อไป ในกรณีนี้บางครั้ง (ไม่เสมอไป) ก็สามารถทำงานไปหรือkillall SystemUIServerkillall Dock

หากไม่สามารถใช้งานได้คุณจะต้องออกจากระบบและย้อนกลับหรือรีบูต ไม่กี่ครั้งที่ฉันได้มาถึงจุดนี้แอปติดอยู่มันป้องกันการออกจากระบบหรือปิดดังนั้นฉันต้องรีบูตอย่างหนัก


ฉันลองทั้งหมดเหล่านี้ (รวมsudoถึงแม้ว่ากระบวนการจะเป็นของฉัน) โดยไม่มีการเปลี่ยนแปลง จะkillall SystemUIServerมีผลกับแอพที่เปิดอยู่อื่น ๆ ของฉันเช่นลืมตำแหน่งหน้าต่าง
Ken

2
gentmatt: ตามที่kill -l, -3 คือ SIGQUIT, และ -9 คือ SIGKILL ("การฆ่าที่ไม่สามารถจับได้, ไม่การเพิกเฉย")
Ken

1
@gentmatt 3 เป็นสัญญาณ QUIT ที่ทำให้กระบวนการสามารถดักจับสัญญาณและทำการล้างข้อมูล 9 คือ KILL คือ "ไม่สามารถจับได้และไม่ติดไฟ" มีสัญญาณอื่น ๆ ที่คุณสามารถส่งได้ เรียกใช้man kill(ซึ่งเป็นคำสั่ง UNIX ที่ดีที่สุด 10 อันดับแรก) เพื่อดูทั้งหมด
CajunLuke

1
ปกติฉันจะฆ่า -9 -3 ไม่แรงกว่า "Force Quit"
segfault

3
@BoTian True; ฉันข้ามไปที่ -9 บางครั้งฉันไม่รำคาญกับ Force Quit เลย แต่สำหรับผู้ใช้ที่ไม่ทราบว่ากำลังทำอะไรอยู่มันสามารถทำงานได้และมีแนวโน้มที่จะเป็นอันตรายน้อยกว่า นอกจากนี้ยังใช้เวลาไม่นานดังนั้นเวลาที่ใช้ในการคำนวณอัตราส่วนผลลัพธ์ที่คาดหวังจึงไม่เลวร้ายนัก
CajunLuke

7

หน้าต่างบังคับออกจากการkillallทำงานและการkillส่งสัญญาณทั้งหมดจะประมวลผลสัญญาณระยะ คุณสามารถใช้killall -killหากไม่ได้ผล

ยูทิลิตี้ killall ฆ่ากระบวนการที่เลือกตามชื่อซึ่งตรงข้ามกับการเลือกโดย pid เหมือนกับที่ทำโดย kill (1) โดยค่าเริ่มต้นมันจะส่งสัญญาณ TERM ไปยังกระบวนการทั้งหมดที่มี UID จริงเหมือนกับผู้เรียก killall ที่ตรงกับชื่อ procname ผู้ใช้ขั้นสูงได้รับอนุญาตให้ฆ่ากระบวนการใด ๆ

หากคุณเรียกใช้sudo dtrace -n 'proc:::signal-send /pid/ { printf("%s -%d %d",execname,args[2],args[1]->pr_pid); }'และออกจากแอปพลิเคชันบางส่วนจากหน้าต่างบังคับออกจากปกติสัญญาณจะแสดงเป็น -15 (TERM) แต่เมื่อคุณออกจากกระบวนการพื้นหลัง (หรือแอปพลิเคชันที่ไม่ปรากฏใน Dock) จากการตรวจสอบกิจกรรมสัญญาณมักจะแสดงเป็น -9 (KILL)

SIGTERM เป็นสัญญาณเริ่มต้นที่ส่งไปยังกระบวนการโดยคำสั่ง kill หรือ killall มันทำให้เกิดการยกเลิกกระบวนการ แต่ต่างจากสัญญาณ SIGKILL มันสามารถจับและตีความ (หรือละเว้น) โดยกระบวนการ ดังนั้น SIGTERM จึงคล้ายกับขอให้กระบวนการยุติอย่างสวยงามช่วยให้สามารถล้างและปิดไฟล์ได้ ด้วยเหตุผลนี้สำหรับระบบ Unix หลายระบบในระหว่างการปิดระบบให้เริ่มต้น SIGTERM สำหรับกระบวนการทั้งหมดที่ไม่จำเป็นต้องปิดเครื่องรอสองสามวินาทีจากนั้นออก SIGKILL เพื่อบังคับให้ยุติกระบวนการใด ๆ ที่ยังคงมีอยู่


ข้อมูลที่ดีบางอย่างที่นี่ แต่ไม่มีการฆ่ากระบวนการเหล่านี้ดูเหมือนว่าจะมีผลกระทบใด ๆ เลย
เคน

หากไม่สามารถใช้SIGKILLงานได้แอปอาจหยุดพักการทำงานชั่วคราวและไม่มีอะไรที่คุณสามารถทำได้จริง ๆ
แบล็กไลท์ส่องแสง

เพียงแค่สงสัยเช่นกันหากนี่เป็นแอพผู้ใช้เช่น mail.app หรือ pages.app หรือว่าเป็นอย่างใดกระบวนการของระบบเช่น Spotlight หรือกระบวนการพื้นหลังของแอปเช่น Plex (ที่ฉันมีปัญหาในการลบ)
David DelMonte

6

ฉันเคยมีสถานการณ์ที่ Force Quit, Activity Monitor killและวิธีอื่น ๆ ใช้งานไม่ได้และ Mac ของฉันไม่สามารถปิดเครื่องได้เนื่องจากมัน

ในกรณีนี้การsudo shutdown -r nowทำงานเมื่อไม่มีอะไรจะทำได้และน่าจะดีกว่าการปิดเครื่องอย่างหนักผ่านปุ่มเปิดปิด


1

ในขณะที่คำตอบข้างต้นเป็นวิธีที่แข็งแกร่งที่จะยุติกระบวนการใด ๆ ที่เป็นเช่นSIGKILLkill -9 process_id

อย่างไรก็ตามกระบวนการที่มีอยู่สิ่งที่เป็นไปไม่ได้ที่จะมิได้Force Quit killพวกเขาเรียกว่าเป็นzombieกระบวนการ

นี่คือสคริปต์สั้น ๆ ที่จะสร้างzombieกระบวนการเป็นเวลาสองนาที:

perl -e 'if($p=fork) {print "unkillable pid:$p\n" ;system("ps -l"); sleep(120)}'

เรียกใช้สคริปต์ด้านบนในเทอร์มินัลแล้วคุณจะได้ผลลัพธ์เช่นนี้:

     unkillable pid:50571
        UID   PID  PPID        F CPU PRI NI       SZ    RSS WCHAN     S             ADDR TTY           TIME CMD
        501 47380 47379     4006   0  31  0  2448416   2900 -      S                   0 ttys000    0:00.36 -bash
        501 50570 47380     4006   0  31  0  2443512   1424 -      S+                  0 ttys000    0:00.01 perl -e if($p=fork) {print "u
#THIS-> 501 50571 50570     2006   0   0  0        0      0 -      Z+                  0 ttys000    0:00.00 (perl)
        501 12795 12794     4006   0  31  0  2448296   1752 -      S+                  0 ttys001    0:00.75 -bash
        501 50123 50122     4006   0  31  0  2448296   2688 -      S+                  0 ttys002    0:00.14 -bash

หากคุณตรวจสอบคอลัมน์สถานะของกระบวนการ unkillable (ในกรณีนี้: 50571) คุณเห็นธงคืออะไรหมายถึงZzombie

คุณสามารถลองส่งkillสัญญาณใด ๆ(เช่นkill -9 50571) และกระบวนการจะยังคงอยู่ อย่างไรก็ตามมันไม่ได้ทำให้ระบบของคุณเจ็บปวดมากนักเพราะจริงๆแล้วมันไม่มีอยู่จริง - เพียงแค่ใช้ตารางกระบวนการเท่านั้น

ในตัวอย่างด้านบนใน 120 วินาทีมันจะถูกล้าง


0

นี่คือสิ่งที่คุณควรทำ:

  1. ในการตรวจสอบกิจกรรมดับเบิลคลิกที่กระบวนการหรือคลิกที่ไอคอนข้อมูลเพื่อเปิดหน้าต่างกระบวนการ
  2. คุณจะเห็นกระบวนการ # ในบรรทัดกลุ่มกระบวนการเป็น processName (####) โดยที่ "####" คือหมายเลขกระบวนการของคุณ
  3. เปิดเทอร์มินัลแล้วพิมพ์ "sudo kill ####" โดยไม่ต้องใส่เครื่องหมายอัญประกาศแล้วกด Enter
  4. ป้อนรหัสผ่านเทอร์มินัลจะไม่แสดงข้อมูลของคุณที่นี่
  5. กระบวนการถูกฆ่า

กระบวนการเช่นนี้จะถูกลบออกได้ดีที่สุดในเซฟโหมดหากคุณกำลังพยายามถอนการติดตั้ง

ไชโยไบรอัน

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