ฉันรู้ว่ามีctrl+ cแต่บางครั้งก็ใช้ไม่ได้ ในเดสก์ท็อป Ubuntu ฉันสามารถปิดหน้าต่างเทอร์มินัลและเปิดใหม่เมื่อเกิดเหตุการณ์นี้ แต่จะแก้ไขได้อย่างไรโดยใช้ CLI ในเซิร์ฟเวอร์ Ubuntu (โดยไม่ต้องรีสตาร์ทกล่อง)
ฉันรู้ว่ามีctrl+ cแต่บางครั้งก็ใช้ไม่ได้ ในเดสก์ท็อป Ubuntu ฉันสามารถปิดหน้าต่างเทอร์มินัลและเปิดใหม่เมื่อเกิดเหตุการณ์นี้ แต่จะแก้ไขได้อย่างไรโดยใช้ CLI ในเซิร์ฟเวอร์ Ubuntu (โดยไม่ต้องรีสตาร์ทกล่อง)
คำตอบ:
CTRL+Cจะส่งSIGINT
ไปที่แอปพลิเคชัน แอปพลิเคชันสามารถกำหนดค่าตัวจัดการสำหรับสัญญาณนี้หรือสามารถละเว้นสัญญาณ โดยค่าเริ่มต้นจะไม่มีตัวจัดการและSIGINT
จะฆ่าแอปพลิเคชัน
คุณสามารถใช้ซึ่งจะส่งCTRL+\ SIGQUIT
สิ่งนี้จะสร้างแกนดัมพ์ถ้าขีด จำกัด หลักไม่ใช่ศูนย์
คุณสามารถระงับกระบวนการและกลับสู่เชลล์ได้ด้วยCTRL+Zวิธีนี้จะหยุดการดำเนินการของกระบวนการและกลับไปที่เชลล์พรอมต์ กระบวนการจะอยู่ในหน่วยความจำและจะพร้อมใช้งานเป็นงานในเชลล์ปัจจุบัน จากนั้นคุณสามารถใช้kill -SIGNAL %%
หรือkill -SIGNAL %<job_ID>
เพื่อส่งสัญญาณไปยังงานนั้น เช่นฆ่างานสุดท้ายที่ใช้kill -9 %%
หากไม่มีสิ่งใดที่ทำงานคุณสามารถส่งได้ตลอดเวลาSIGTERM
ซึ่งเป็นทางเลือกสุดท้ายSIGKILL
ซึ่งจะยุติกระบวนการใด ๆ สัญญาณนี้เป็นสัญญาณอื่น ๆ จะต้องส่งเป็นผู้ใช้เดียวกันกับกระบวนการที่คุณพยายามหยุดหรือเป็นราก หากต้องการส่งSIGKILL
ไปยังกระบวนการอันดับแรกให้ค้นหากระบวนการที่มีps aux
หรือps -edf
จากนั้นเรียกใช้kill -SIGKILL <process_ID>
โดยที่<process_ID>
คือPID
คอลัมน์ในps
เอาต์พุต
ไม่สามารถส่งสัญญาณได้หากกระบวนการอยู่ในการโทรแบบต่อเนื่อง โทรสำรองที่มีฟังก์ชั่นเคอร์เนลที่ไม่สามารถหยุดและมักจะเกิดขึ้นเพราะคนขับไม่ดี (เช่นคนขับรถที่ไม่reentrant ) กระบวนการที่อยู่ในโหมดหยุดทำงานแบบต่อเนื่องไม่สามารถหยุดได้จนกว่าการโทรจะเสร็จสมบูรณ์หรือรีบูตเซิร์ฟเวอร์
หากกระบวนการกลายเป็นซอมบี้มันจะไม่ใช้ทรัพยากรใด ๆ เพียงแค่เพิ่มพื้นที่ในตารางกระบวนการ กระบวนการซอมบี้ไม่สามารถรับสัญญาณได้
รายการสัญญาณสำหรับสถาปัตยกรรมปัจจุบันสามารถพบได้ kill -l
ดูหน้าคนของkill
, และps
bash
เพื่อดูหน้าคนใช้สิ่งที่ชอบ:man ps
หากคุณมีสิทธิ์เข้าถึงคอนโซลอย่างสมบูรณ์คุณสามารถทำได้Alt- F1..12และรับคอนโซลใหม่
จากตรงนั้นคุณสามารถทำรายการกระบวนการดังนี้:
ps aux | grep <process-name>
จากนั้นทำkill
ID กระบวนการ:
kill -9 <pid>
หากคุณไม่มีสิทธิ์เข้าถึงแบบเต็มเพียงแค่เปิดหน้าต่างเทอร์มินัลอื่น (อาจผ่าน PuTTY หรือคล้ายกัน) และทำรายการกระบวนการข้างต้นและขั้นตอนการทำลาย
Ctrl C ส่ง SIGINT ไปยังกระบวนการทำงานของคุณ หากคุณไม่ต้องการเปิดคอนโซลอื่นคุณสามารถส่ง SIGQUIT ด้วย Ctrl \ แอปนี้จะจัดการกับแอปที่ใช้เป็นประจำทุกวันซึ่ง SIGINT จะไม่ทำ
ฉันต้องการส่ง SIGKILL ด้วยทางลัดเป็นการส่วนตัว แต่ฉันไม่ทราบวิธีการทำเช่นนั้น
ฉันพิจารณาpgrep
และpkill
ใช้งานง่ายกว่าkill
ด้วยรหัสกระบวนการที่ชัดเจน
นอกจากนี้แทนที่จะเริ่มด้วยสัญญาณ 9 (SIGKILL) ให้พิจารณาเริ่มต้นด้วย SIGTERM เริ่มต้น (15) นี่จะเป็นการเปิดโอกาสให้กระบวนการยุติอย่างสง่างาม (ถ้าทำได้)
pkill -15 thing
และpkill thing
ควรจะเทียบเท่า
นี่คือวิธีที่จะทำงาน สมมติว่า ntpd ถูกแขวน
กระบวนการคืออะไร? (คุณสามารถข้ามไปที่ pkill หากคุณเชื่อว่าคุณจะไม่มีผลบวกปลอม)
$ pgrep -fl ntp
1034 /usr/sbin/ntpd
1037 /usr/sbin/ntpd
ฆ่ากระบวนการ:
$ pkill ntpd
ใช้pgrep
อีกครั้งเพื่อดูว่าสำเร็จหรือไม่
pkill -9
ถ้าไม่ได้ในที่สุดก็ย้ายไป
คุณจะเปลี่ยนเป็นเทอร์มินัลใหม่ค้นหา PID ของกระบวนการที่ค้างอยู่ (โดยใช้ps
) จากนั้นใช้kill
เพื่อฆ่ากระบวนการ kill (PID)
ครั้งแรกที่ผมจะใช้ kill -9 (PID)
หากไม่ได้ทำงานผมจะใช้ หากไม่ได้หยุดกระบวนการต้องรีบูทเครื่อง
Cntrl+ \ทำงานให้ฉัน (ที่Cntrl+ cหรือzไม่ทำงาน)