บังคับให้ออกจากกระบวนการทำงานผิดปกติโดยใช้คำสั่ง 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
คำสั่งช่วยให้เราสามารถตรวจสอบได้ว่ากระบวนการนั้นถูกฆ่าหรือไม่