ฉันกำลังเรียกใช้โปรแกรมในเทอร์มินัลที่ฉันหนีไม่พ้นCtrl- Cและฉันต้องการที่จะฆ่า ฉันจะหา PID ได้อย่างไร
ฉันกำลังเรียกใช้โปรแกรมในเทอร์มินัลที่ฉันหนีไม่พ้นCtrl- Cและฉันต้องการที่จะฆ่า ฉันจะหา PID ได้อย่างไร
คำตอบ:
เปิดเทอร์มินัลอื่นแล้วรันps ax | grep foo
โดยที่ foo เป็นชื่อของโปรแกรมที่ไม่ตอบสนอง สิ่งนี้ควรส่งคืนบรรทัดเอาต์พุตที่มีลักษณะดังนี้:
$ ps ax | grep firefox
2222 ? S 0:00 /bin/sh /usr/lib/firefox-3.6.9/firefox
2231 ? Sl 514:36 /usr/lib/firefox-3.6.9/firefox-bin
30290 pts/2 S+ 0:00 grep --color=auto firefox
ฟิลด์แรกของแต่ละบรรทัดผลลัพธ์เป็นหมายเลขที่แสดงถึง Process ID ของโปรแกรมที่จับคู่โดยgrep
(คุณสามารถละเว้นฟิลด์สุดท้ายซึ่งแสดงถึงgrep
ตัวเองได้อย่างปลอดภัย
หากต้องการหยุดกระบวนการที่กระทำผิดให้ทำ:
kill pid
โดย pid คือ ID กระบวนการของโปรแกรม คุณอาจต้องใช้วิจารณญาณของคุณในการพิจารณาว่าการแข่งขันประเภทใดที่จะต้องมีการkill
แก้ไขหรือคุณสามารถใช้top
แทนได้ การใช้kill
ด้วยตัวเองจะส่ง SIGTERM ซึ่งคุณควรลองก่อนเพราะจะทำให้โปรแกรมสามารถล้างข้อมูลได้อย่างถูกต้อง หาก SIGTERM ล้มเหลวลอง SIGHUP ซึ่งเป็นยา kill -HUP pid
stonger: หากสิ่งอื่นล้มเหลวให้ส่ง SIGKILL แต่คุณควรทำเช่นนั้นเป็นทางเลือกสุดท้ายเนื่องจาก SIGKILL ทำให้เคอร์เนลยุติกระบวนการทันทีโดยไม่มีความเป็นไปได้ในการล้างข้อมูล ในบางครั้งอาจส่งผลให้ข้อมูลเสียหายหรือเกิดปัญหาอื่น ๆ ดังนั้นอีกครั้งให้ส่ง SIGKILL เป็นทางเลือกสุดท้าย ที่จะทำเช่นนั้นหรือkill -KILL pid
kill -9 pid
หากคุณใช้งานอินเทอร์เฟซแบบกราฟิกแน่นอนว่าคุณไม่จำเป็นต้องหลอกให้ใช้บรรทัดคำสั่งที่บ้าคลั่งเพื่อทำงานให้เสร็จ เพียงแค่เปิด "การตรวจสอบระบบ" ไปที่แท็บกระบวนการเลือกกระบวนการที่คุณต้องการหยุด (อืมมันอาจจะเป็นอันที่ใช้ CPU 90% ใช่หรือไม่) และคลิกขวา เนื่องจากกระบวนการหยุดทำงานแล้ว (นั่นเป็นปัญหาใช่ไหม) เลือก End Process หรือ Kill Process จากเมนูผลลัพธ์
สินเชื่อเพื่อkoanhead
kill -9
เป็นคำแนะนำที่ไม่ดี ฉันได้แก้ไขคำตอบเพื่อแก้ไข
ping
sleep
ตามunix.stackexchange.com/a/275826/72988multiplexer
มันเป็นไปไม่ได้ในอูบุนตูโดยไม่ต้อง
ฉันไม่คิดว่ามีความต้องการคำสั่งยาว ๆ เช่นนี้เมื่อคุณสามารถทำคำสั่งเดียวกันได้ด้วย pgrep, pkill, pidof ฯลฯ ...
pgrep:
pgrep [options] pattern
DESCRIPTION: pgrep ค้นหากระบวนการที่กำลังทำงานอยู่และแสดง ID กระบวนการที่ตรงกับเกณฑ์การเลือกไปยัง stdout เกณฑ์ทั้งหมดต้องตรงกัน ตัวอย่างเช่น,
ในการค้นหากระบวนการที่ชื่อ sshd เป็นเจ้าของโดยรูท
$ pgrep -u root sshd
แสดงกระบวนการที่เป็นเจ้าของโดย root OR daemon
$ pgrep -u root,daemon
pidof:
DESCRIPTION :
Pidof ค้นหารหัสกระบวนการ (pids) ของโปรแกรมที่มีชื่อ มันพิมพ์รหัสเหล่านั้นในการส่งออกมาตรฐาน
ไวยากรณ์: pidof program_name
ในการฆ่าโปรแกรมด้วย pid ให้ใช้ตัวอย่าง pkill:
pkill pid
pkill -f process_name
pkill -o process_name
pkill -n process_name
pkill -l process_name
-f
การตั้งค่าสถานะ: ค้นหา process_name (ดู man pkill) การ
-o
ตั้งค่าสถานะ: เลือกเฉพาะกระบวนการที่ตรงกันที่เก่าที่สุด
-n
ธง: เลือกเฉพาะกระบวนการจับคู่ใหม่ล่าสุด
-l
ธง: รายการชื่อกระบวนการเช่นเดียวกับ ID กระบวนการ
วิธีที่ง่ายที่สุดที่จะรู้ว่า pid ของโปรแกรมที่กำลังใช้อยู่คือ:
pidof <application name>
ตัวอย่างเช่นหากคุณเริ่มเป็นกลุ่มและต้องการทราบ pid ของมัน:
pidof vim
จำไว้ว่าคุณจะต้องระบุชื่อโปรแกรมที่ถูกต้องที่เริ่มต้น
ตัวอย่างเช่นหากคุณกำลังใช้งาน vi และดำเนินการpidof vim
คุณจะไม่ได้รับผลลัพธ์ที่ถูกต้อง
อ้างถึงpidof
หน้าคู่มือสำหรับข้อมูลเพิ่มเติม
pidof mysqld
ส่งคืน PID อย่างไรก็ตามหากฉันพิมพ์pidof Mariadb
ไม่มีอะไรจะส่งคืน เป็น PID เดียวกันสำหรับ MariaDB และ MySQL หรือไม่
ฉันพบว่าเป็นการดีที่จะใช้การค้นหาแบบตัวพิมพ์เล็กและตัวพิมพ์ใหญ่โดยเพิ่ม "-i" และใช้ "aux" แทน "ax" เพื่อรับเอาต์พุตที่มีความหมายมากขึ้น:
ps aux | grep -i firefox
หากคุณต้องการฆ่ากระบวนการทั้งหมดที่คุณอาจใช้:
ps aux | grep -i firefox | awk {'print $2'} | xargs kill -9
นั่นคือการฆ่าที่มีพลัง ปล่อย "-9" ถ้าคุณต้องการการฆ่าแบบนุ่ม
ps aux | grep -i firefox...
กระบวนการเนื่องจากมีข้อความfirefox
อยู่ในคำสั่ง!
grep -i firefo[x]
เพื่อจับคู่ firefox เท่านั้น
ถ้าคุณต้องการเฉพาะ pid (มีประโยชน์สำหรับสคริปต์ autokill ฯลฯ ... )
pgrep -f desired_program_name
สำหรับผู้ที่ใช้งาน Ubuntu 16.04 LTS คุณจะต้องใช้งานps ax
และไม่เพียง แต่ps
ที่บรรทัดคำสั่งมิฉะนั้นคุณจะได้รับกระบวนการที่วางไข่จากเทอร์มินัลเฉพาะที่คุณใช้งานอยู่ (โดยทั่วไปคือ 'ทุบตี' [เชลล์ที่คุณอยู่ ] และ 'ps' [สิ่งที่คุณเพิ่งวิ่ง])
ps -e
(แสดงทั้งหมด) และps -ejH
(แสดงแผนผังกระบวนการ)
นอกจากนี้คุณยังสามารถเปิดเทอร์มินัลอื่น (หรือสลับไปยัง tty อื่น) และเรียกใช้top
ซึ่งโดยทั่วไปจะเป็นเวอร์ชันข้อความของการตรวจสอบระบบ คอลัมน์แรกแสดงรายการ PID ของแต่ละกระบวนการที่กำลังทำงานซึ่งคุณสามารถฆ่าได้โดยการกดKป้อน PID แล้วป้อนสัญญาณตัวเลขที่จะส่ง
คุณสามารถทำได้:
ps ax | grep firefox | cut -f2 -d" " - | xargs kill -9
สองท่อแรกรับข้อมูลกระบวนการต่อไปเราพยายามรับคอลัมน์ PID โดยใช้การตัดแบบเก่าและจากนั้นเราให้ผลลัพธ์ PID ที่จะฆ่า
kill -9
เป็นปืนที่ใหญ่ที่สุดที่คุณต้องฆ่ากระบวนการ คุณควรลองใช้สัญญาณที่นุ่มนวลกว่านี้ก่อนที่จะหันไปใช้ SIGKILL เพื่อให้กระบวนการล้างทรัพยากร
top
หรือ
screen -list|ls
รายการ pid ทั้งหมดที่มีกระบวนการที่สอดคล้องกัน
kill -[pid]