วิธีฆ่ากระบวนการตามชื่อใน Linux

บังคับให้ออกจากกระบวนการทำงานผิดปกติโดยใช้คำสั่ง Linux เหล่านี้

เพื่ออธิบายความหมายของ 'กระบวนการ' ด้วยคำที่ง่ายที่สุดก็คือ มันคืออินสแตนซ์ที่ทำงานอยู่ของแอปพลิเคชันหรือโปรแกรมใดๆ ในระบบของคุณ คุณอาจใช้งานแอพพลิเคชั่นหลายตัวพร้อมกัน เช่น การท่องเว็บ ฟังเพลงที่ทำงานบนเทอร์มินัลของคุณ ฯลฯ มีกระบวนการเบื้องหลังมากมายที่เกี่ยวข้องกับแอพพลิเคชั่นเหล่านี้ที่ผู้ใช้เรียกใช้

ทุกแอปพลิเคชันหรือโปรแกรมที่ทำงานบนระบบของคุณจะสร้างกระบวนการหลายอย่างที่เกี่ยวข้องกับแอปพลิเคชันเดียวของคุณ บางครั้งนี่อาจเป็นปัญหา และการกำจัดกระบวนการเหล่านี้เป็นทางเลือกเดียวที่คุณมี

กระบวนการ 'การฆ่า' เป็นหนึ่งในตัวเลือกที่มีประโยชน์ที่ Linux ให้คุณหยุดกระบวนการที่กำลังดำเนินอยู่ ไม่ว่าจะเป็นกระบวนการเบื้องหน้าหรือเบื้องหลัง ในบทความนี้เราจะทบทวนคำสั่งเช่น ฆ่า, pkill และ killall เพื่อบังคับให้ออกจากกระบวนการใดๆ บนระบบ

ทำไมต้องฆ่ากระบวนการ?

การทำความเข้าใจแนวคิดของการฆ่ากระบวนการเป็นสิ่งสำคัญก่อนที่จะดำเนินการต่อไปในบทช่วยสอนนี้ การฆ่าอาจดูเป็นวิธีที่โหดร้ายมากในการแสดงแนวคิด แต่ความหมายโดยนัยคือการยกเลิกกระบวนการอย่างแข็งขัน

เหตุใดจึงยกเลิกหรือออกจากกระบวนการที่ดำเนินอยู่ เมื่อหลายกระบวนการทำงานอยู่เบื้องหลัง กระบวนการทั้งหมดหรือบางส่วนอาจทำงานผิดพลาดและอาจทำให้ระบบของคุณทำงานผิดปกติ การดำเนินการนี้จะทำให้งานต่อเนื่องของคุณล่าช้า เนื่องจากกระบวนการทำงานผิดพลาดอาจทำให้ระบบของคุณหยุดชะงักชั่วขณะหนึ่ง

บางครั้ง การออกจากกระบวนการทำงานผิดปกติทั้งหมดดูเหมือนจะเป็นทางเลือกเดียวในการคืนค่าสภาวะปกติในระบบของคุณ Linux ช่วยให้คุณสามารถฆ่ากระบวนการโดยใช้ pid หรือชื่อกระบวนการ

ใช้ pgrep สั่งการ

ผู้ใช้ Linux ส่วนใหญ่คุ้นเคยกับ grep สั่งการ. ดิ pgrep คำสั่งสามารถใช้กับบรรทัดที่คล้ายกันของ grep.

pgrep คำสั่งเมื่อใช้ จะแสดง pid ของกระบวนการทำงานตามที่ระบุในคำสั่ง คำสั่งนี้จะพิสูจน์ได้ว่ามีประโยชน์มากในขณะที่ใช้ pkill สั่งการ.

ไวยากรณ์ทั่วไป:

pgrep [ตัวเลือก] [รูปแบบ]

ตัวเลือกที่สำคัญที่มีให้กับ pgrep สั่งการ

ตัวเลือกคำอธิบาย
-ยูแสดงรายการรหัสกระบวนการที่เป็นของผู้ใช้เฉพาะ
-คนับจำนวนกระบวนการจับคู่
-ผมแสดงรายการเฉพาะชื่อกระบวนการ
-aแสดงรายการเส้นทางแบบเต็มของชื่อกระบวนการ

ให้เราสาธิตการใช้ pgrep คำสั่งโดยใช้ตัวอย่าง

pgrep -u gaurav gnome

ที่นี่เราต้องการที่จะเห็น pids ของกระบวนการ gnome ที่ผู้ใช้ 'gaurav' เป็นเจ้าของ ตัวเลือก -ยู ช่วยให้คุณแสดงรายการ pids ของกระบวนการที่เป็นของผู้ใช้เฉพาะ ในกรณีนี้ผู้ใช้ gaurav

เอาท์พุท:

gaurav@ubuntu:~$ pgrep -u gaurav gnome 1752 1755 1909 1922 2021 2576 4279 gaurav@ubuntu:~$

ในขณะที่เราดำเนินการกับบทช่วยสอนนี้ pgrep คำสั่งจะช่วยเราในการยืนยันว่ากระบวนการถูกฆ่าหรือยังคงทำงานอยู่

ตอนนี้ให้เราย้ายไปที่ pkill คำสั่งและการดำเนินการ

โดยใช้ pkill สั่งการ

คุณสามารถใช้ pkill คำสั่งใน Linux เพื่อฆ่ากระบวนการโดยใช้ชื่อกระบวนการ แม้จะไม่รู้จัก pid ของกระบวนการบางอย่าง แม้ว่าคุณจะฆ่ากระบวนการนั้นโดยใช้คำสั่ง pkill สั่งการ.

กระบวนการสามารถระบุได้ด้วยชื่อเต็มหรือชื่อบางส่วนในขณะที่ใช้ pkill สั่งการ. แม้ว่าคุณจะป้อนชื่อบางส่วนของกระบวนการ pkill คำสั่งจะจับคู่กระบวนการที่ทำงานอยู่ทั้งหมดด้วยชื่อที่ตรงกันที่คุณป้อนในคำสั่ง

ไวยากรณ์:

pkill [ตัวเลือก][process_name_pattern] 

ตัวอย่าง:

ให้เราแสดงกระบวนการที่กำลังทำงานโดยใช้คำสั่ง สูงสุด สั่งการ. คุณยังสามารถใช้ ปล คำสั่งแสดงรายการกระบวนการ

สูงสุด
ด้านบน - 14:24:02 ขึ้น 3:12, 1 ผู้ใช้, โหลดเฉลี่ย: 0.29, 0.48, 0.58 งาน: ทั้งหมด 221, 1 วิ่ง, 172 นอน, 0 หยุด, 1 ซอมบี้ %Cpu(s): 5.6 เรา, 1.0 sy , 0.0 ni, 92.9 id, 0.4 wa, 0.0 hi, 0.1 si, 0.0 st KiB Mem : 3928240 รวม, 610456 ฟรี, 2233152 ใช้แล้ว 1084632 buff/cache KiB Swap: รวม 4083708, 3378884 ฟรี, 704824 ใช้แล้ว 1187268 ประโยชน์ Mem PID ผู้ใช้ PR NI VIRT RES SHR S %CPU % MEM TIME+ คำสั่ง 4077 gaurav 20 0 3312128 673480 118360 S 19.6 17.1 15:13.23 เนื้อหาเว็บ 3712 gaurav 20 0 3953008 453544 116476 S 4.0 11.5 9:28.39 กระทู้หลัก 2010 gaurav 4084232 111096 45024 S 1.7 2.8 3:14.85 gnome-shell 1197 root 20 0 1039612 33704 22988 S 1.0 0.9 3:04.42 Xorg 1426 couchdb 20 0 3772396 16908 2520 S 0.7 0.4 1:50.83 beam.smp 3288 gaurav 20 0 722480 25048 18272 S 0.7 0.6 0:06.84 gnome-terminal- 3915 gaurav 20 0 2804900 231524 111228 S 0.7 5.9 0:54.42 เนื้อหาเว็บ 4146 gaurav 20 0 3017924 245304 120604 S 0.7 6.2 2:01.21 เนื้อหาเว็บ 4417 gaurav 20 0 2964208 234396 119160 S 0.7 6.0 0 :59.90 เนื้อหาเว็บ 4860 gaurav 20 0 3066800 372920 132544 S 0.7 9.5 0:48.20 เนื้อหาเว็บ 16007 gaurav 20 0 41944 3780 3116 R 0.7 0.1 0:00.28 ด้านบน 

โดยใช้ สูงสุด คำสั่งจะแสดงหลายกระบวนการบนเทอร์มินัลของคุณ ให้เราลองแสดงกระบวนการด้วยชื่อเฉพาะ เราจะใช้ grep คำสั่งเพื่อแสดงกระบวนการที่มีชื่อตรงกับสตริง 'mongo'

ด้านบน | grep -i mongo

บันทึก: ที่นี่ ฉันใช้ตัวเลือก -i เพื่อทำให้การค้นหาไม่คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่

ผลลัพธ์ของคำสั่งนี้จะแสดงกระบวนการที่ตรงกับชื่อ 'mongo'

 1158 mongodb 20 0 288564 4848 1320 S 0.7 0.1 1:03.22 mongod 1158 mongodb 20 0 288564 4848 1320 S 1.0 0.1 1:03.25 mongod 1158 mongodb 20 0 288564 4848 1320 S 0.7 0.1 1:03.27 mongod 1158 mongodb 20 0 288564 4848 1320 S 0.7 0.1 1:03.29 mongod 1158 mongodb 20 0 288564 4848 1320 S 0.7 0.1 1:03.31 mongod 1158 mongodb 20 0 288564 4848 1320 S 0.7 0.1 1:03.33 mongod 1158 mongodb 20 0 288564 4848 1320 S 1.0 0.1 1:03.36 mongod 1158 mongodb 20 0 288564 4848 1320 S 0.7 0.1 1:03.38 mongod 1158 mongodb 20 0 288564 4848 1320 S 0.7 0.1 1:03.40 mongod 1158 mongodb 20 0 288564 4848 1320 S 1.0 0.1 1:03.43 mongod 1158 mongodb 20 0 288564 4848 1320 S 0.7 0.1 1:03.45 mongod 1158 mongodb 20 0 288564 4848 1320 S 1.0 0.1 1:03.48 mongod 1158 mongodb 20 0 288564 4848 1320 S 0.3 0.1 1:03.49 mongod 1158 mongodb 20 0 288564 4848 1320 S 1.0 0.1 1:03.52 mongod 1158 mongodb 20 0 288564 4848 1320 S 0.7 0.1 1:03.54 mongod 1158 mongodb 20 0 288564 4848 1320 S 1.0 0.1 1:03.57 มอนโกด

ตอนนี้เราจะใช้ pkill คำสั่งให้ฆ่ากระบวนการที่เรียกว่า 'mongo'

pkill mongo

คำสั่งนี้จะฆ่ากระบวนการ mongo เราสามารถยืนยันได้ว่ากระบวนการถูกบังคับให้ออกโดยใช้ปุ่ม pgrep คำสั่งที่แสดง pid ของกระบวนการทำงานตามเกณฑ์ที่ผู้ใช้กำหนด

gaurav@ubuntu:~$ pgrep mongo gaurav@ubuntu:~$

คำสั่งนี้จะไม่คืนค่าใดๆ นี่เป็นการยืนยันว่ากระบวนการ 'mongo' ถูกฆ่าโดยใช้ pkill สั่งการ.

ตัวเลือกที่ใช้บ่อยกับ pkill สั่งการ

ในขณะที่ใช้ pkill คำสั่งเราจะต้องมีตัวเลือกดังกล่าวสำหรับการใช้งาน .อย่างเหมาะสมและง่ายดาย pkill สั่งการ.

ตัวเลือกคำอธิบาย
-fจับคู่กับอาร์กิวเมนต์แบบเต็ม รวมทั้งช่องว่าง เครื่องหมายคำพูด อักขระพิเศษ
-ยูเพื่อแจ้งกระบวนการ pkill เพื่อให้ตรงกับกระบวนการที่เรียกใช้โดยผู้ใช้ที่ระบุ
-1โหลดกระบวนการใหม่
-9ฆ่ากระบวนการ
-15ยกเลิกกระบวนการอย่างสง่างาม

มาดูอีกตัวอย่างหนึ่งของ pkill คำสั่งโดยใช้ -f ตัวเลือก.

มีสองคำสั่งที่กำลังดำเนินการอยู่บนเครื่องเทอร์มินัลดังที่แสดงด้านล่าง

ping bbc.com ping youtube.com

ทั้งสองกระบวนการเริ่มต้นโดย ปิง สั่งการ. ตอนนี้ สมมติว่าเราต้องการยุติกระบวนการ “ping youtube.com” เพียงขั้นตอนเดียว จากนั้นเราต้องใช้ -f ตัวเลือกด้วย pkill คำสั่งที่ฆ่ากระบวนการด้วยชื่อเฉพาะรวมถึงช่องว่างและเครื่องหมายคำพูดจากชื่อกระบวนการ

สั่งการ:

gaurav@ubuntu:~$ pkill -f "ping youtube.com" gaurav@ubuntu:~$ 

ผลลัพธ์:

gaurav@ubuntu:~$ ping youtube.com PING youtube.com (142.250.67.206) 56(84) ไบต์ของข้อมูล 64 ไบต์จาก bom12s08-in-f14.1e100.net (142.250.67.206): icmp_seq=1 ttl=117 เวลา=30.9 ms 64 ไบต์จาก bom12s08-in-f14.1e100.net (142.250.67.206): icmp_seq=2 ttl =117 เวลา=121 ms 64 ไบต์จาก bom12s08-in-f14.1e100.net (142.250.67.206): icmp_seq=206 ttl=117 เวลา=86.5 ms 64 ไบต์จาก bom12s08-in-f14.1e100.net (142.250.67.206 ): icmp_seq=207 ttl=117 เวลา=105 ms สิ้นสุด gaurav@ubuntu:~$ 

ที่นี่ “ping youtube.comกระบวนการ ” ถูกฆ่า และ “ping bbc.com” ยังคงทำงานอยู่บนเทอร์มินัล

ในกรณีที่ถ้าเราใช้ pkill ping คำสั่งมันก็จะฆ่าทั้ง ปิง กระบวนการที่ไม่พึงปรารถนา

สัญญาณที่ใช้กับ pkill สั่งการ

pkill บังคับให้กระบวนการหยุดทำงานโดยส่งสัญญาณเฉพาะไปยังกระบวนการนั้น มีสามสัญญาณที่เป็นไปได้ซึ่ง pkill คำสั่งสามารถส่งไปยังกระบวนการขึ้นอยู่กับคำสั่งที่ผู้ใช้ให้

ต่อไปนี้เป็นรายการสัญญาณที่มีอยู่

สัญญาณข้อมูลจำเพาะ
1(HUP)รีโหลดกระบวนการที่ระบุ
9 (ฆ่า)ฆ่ากระบวนการที่ระบุ
15 (ภาคเรียน)ค่อย ๆ หยุดหรือยกเลิกกระบวนการที่ระบุ

สำหรับบทช่วยสอนนี้ เราจะพึ่งพา ฆ่า สัญญาณ. เรามาดูตัวอย่างเพื่อทำความเข้าใจกันดีกว่า

ใช้ pgrep คำสั่งที่จะได้รับ pid ตรงกับชื่ออาปาเช่

gaurav@ubuntu:~$ pgrep apache 1218 10402 10403 gaurav@ubuntu:~$
pkill - ฆ่า apache

หรือคุณสามารถใช้คำสั่งที่มีตัวเลข (เช่น 1, 9, 15)

pkill -9 apache

คำสั่งทั้งสองที่แสดงด้านบนจะฆ่า apache ของกระบวนการ ยืนยันกับ pgrep สั่งอีกครั้ง

gaurav@ubuntu:~$ pgrep apache gaurav@ubuntu:~$

ในฐานะที่เป็น pgrep คำสั่งไม่ส่งคืนเอาต์พุต พิสูจน์ว่ากระบวนการ apache ถูกฆ่า

บทสรุป

ในบทช่วยสอนนี้ เราได้เรียนรู้เกี่ยวกับ pkill คำสั่งและวิธีการใช้เพื่อฆ่ากระบวนการโดยใช้ชื่อกระบวนการโดยตรง นอกจากนี้เรายังได้เรียนรู้เกี่ยวกับ pgrep คำสั่งที่ใช้ในการดึง ID กระบวนการของกระบวนการที่รันโดยผู้ใช้เฉพาะ ดิ pgrep คำสั่งช่วยให้เราสามารถตรวจสอบได้ว่ากระบวนการนั้นถูกฆ่าหรือไม่