กลับไปหน้าบทความ

อ่าน 6 นาที

ฆ่า (คำสั่ง)

ในด้านคอมพิวเตอร์ คำสั่ง ` signal` killเป็นคำสั่งที่ใช้ในระบบปฏิบัติการ ยอดนิยมหลายระบบ เพื่อส่งสัญญาณไปยังกระบวนการ ที่กำลังทำงาน อยู่

ฆ่า (คำสั่ง)

ฆ่า
ผู้เขียนต้นฉบับเอทีแอนด์ที เบลล์ แล็บโบราทอรีส์
นักพัฒนานักพัฒนาซอฟต์แวร์โอเพนซอร์สและเชิงพาณิชย์หลายราย
ปล่อยกุมภาพันธ์ พ.ศ. 2516 ( 2516-2516 )
ระบบปฏิบัติการยูนิก , ระบบปฏิบัติการคล้ายยูนิก , Plan 9 , Inferno , OS-9 , Windows , ReactOS , Singularity , IBM i
แพลตฟอร์มข้ามแพลตฟอร์ม
พิมพ์สั่งการ
ใบอนุญาตReactOS: LGPL-2.1 หรือเวอร์ชันที่ใหม่กว่า

ในด้านคอมพิวเตอร์ คำสั่ง ` signal` killเป็นคำสั่งที่ใช้ในระบบปฏิบัติการ ยอดนิยมหลายระบบ เพื่อส่งสัญญาณไปยังกระบวนการ ที่กำลังทำงาน อยู่

การนำไปใช้

ยูนิซและระบบปฏิบัติการที่คล้ายยูนิซ

ใน ระบบปฏิบัติการ Unixและระบบปฏิบัติการที่คล้าย Unixkillคำสั่ง `kill`ใช้สำหรับส่งสัญญาณไปยังกระบวนการ โดยค่าเริ่มต้น ข้อความที่ส่งคือสัญญาณยุติซึ่งขอให้กระบวนการออกจาก ระบบ แต่ คำว่า `kill`อาจทำให้เข้าใจผิดได้ เพราะสัญญาณที่ส่งอาจไม่เกี่ยวข้องกับการยุติกระบวนการเลยkillคำสั่ง `kill` เป็นตัวห่อหุ้มการเรียกใช้ระบบ `signal` ซึ่งส่งสัญญาณไปยังกระบวนการหรือกลุ่มกระบวนการในระบบ โดยอ้างอิงจากรหัสกระบวนการ (PID) หรือ รหัส กลุ่มกระบวนการ (PGID) ที่เป็นตัวเลข `kill` มักถูกจัดให้เป็นยูทิลิตี้แบบสแตนด์อโลนตามที่กำหนดโดย มาตรฐาน POSIXอย่างไรก็ตามเชลล์ ส่วนใหญ่ มี คำสั่ง ในตัวที่อาจแตกต่างจากนี้เล็กน้อย[ 1 ] [ 2 ]kill()killkill

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

สัญญาณทั้งหมด ยกเว้น SIGKILL และSIGSTOP ("หยุด") สามารถ "ดักจับ" โดยกระบวนการได้ ซึ่งหมายความว่าสามารถเรียกใช้ฟังก์ชันพิเศษได้เมื่อโปรแกรมได้รับสัญญาณเหล่านั้น ข้อยกเว้นสองประการคือ SIGKILL และ SIGSTOP จะถูกมองเห็นโดยเคอร์เนล ของระบบโฮสต์เท่านั้น ซึ่งเป็นวิธีการที่เชื่อถือได้ในการควบคุมการทำงานของกระบวนการ SIGKILL จะฆ่ากระบวนการ และ SIGSTOP จะหยุดกระบวนการชั่วคราว จนกว่าจะได้รับSIGCONT ("ดำเนินการต่อ") [ 3 ]

ระบบ Unix มีกลไกการรักษาความปลอดภัยเพื่อป้องกันไม่ให้ผู้ใช้ที่ไม่ได้รับอนุญาตยุติกระบวนการอื่น โดยหลักแล้ว กระบวนการหนึ่งจะส่งสัญญาณไปยังอีกกระบวนการหนึ่งได้นั้น เจ้าของกระบวนการที่ส่งสัญญาณจะต้องเป็นเจ้าของกระบวนการที่รับสัญญาณคนเดียวกัน หรือเป็นผู้ใช้ระดับสูงสุด (superuser )

สัญญาณที่มีอยู่ทั้งหมดมีชื่อแตกต่างกัน และถูกกำหนดหมายเลขกำกับไว้ การจับคู่ระหว่างหมายเลขและสัญญาณอาจแตกต่างกันไปในแต่ละระบบ Unix โดยทั่วไป SIGTERM มักมีหมายเลข 15 ในขณะที่ SIGKILL มักมีหมายเลข 9

ตัวอย่าง

กระบวนการสามารถรับ สัญญาณ SIGTERMได้สี่วิธี (ในกรณีนี้ รหัสกระบวนการคือ '1234'):

kill 1234 kill -s TERM 1234 kill -TERM 1234 kill -15 1234

กระบวนการนี้สามารถรับ สัญญาณ SIGKILLได้สามวิธี:

kill -s KILL 1234 kill -KILL 1234 kill -9 1234

สัญญาณที่มีประโยชน์อื่นๆ ได้แก่ HUP, TRAP, INT, SEGVและ ALRM HUP ส่ง สัญญาณ SIGHUPโปรแกรมบางตัว เช่นApacheและSendmailจะอ่านไฟล์การกำหนดค่า ใหม่ เมื่อได้รับ SIGHUP ดังนั้นคำสั่ง kill จึงสามารถใช้เพื่อจุดประสงค์นี้ได้เช่นกัน สามารถสร้างสัญญาณ SIGINTได้ง่ายๆ โดยการกดCTRL+Cในเชลล์ Unix ส่วนใหญ่ นอกจากนี้ ยังเป็นเรื่องปกติที่+จะถูกแมปกับSIGTSTP ("terminal stop") และ+ (เครื่องหมายแบ็กสแลช) จะถูกแมปกับSIGQUITซึ่งสามารถบังคับให้โปรแกรมทำการดัมพ์หน่วยความจำได้ CTRLZCTRL\

  • คำสั่ง killall – ในระบบ Unix บางเวอร์ชัน เช่นSolarisยูทิลิตี้นี้จะถูกเรียกใช้งานโดยอัตโนมัติเมื่อระบบกำลังปิดตัวลงมันทำงานคล้ายกับคำสั่ง kill ด้านบน แต่แทนที่จะส่งสัญญาณไปยังกระบวนการใดกระบวนการหนึ่ง สัญญาณจะถูกส่งไปยังทุกกระบวนการในระบบ ในบางระบบ เช่นIRIX , LinuxและFreeBSDจะมีการระบุชื่อของกระบวนการ (หรือหลายกระบวนการ) ที่ต้องการฆ่าโดยใช้พารามิเตอร์ ตัวอย่างเช่น หากต้องการฆ่ากระบวนการ เช่น อินสแตนซ์ของโปรแกรมเล่นเพลงXMMSxmms ที่เรียกใช้งานโดยคำสั่ง `killall` ผู้ใช้จะต้องใช้คำสั่ง ` kill killall xmmsall` ซึ่งจะฆ่าทุกกระบวนการที่มีชื่อว่า `xMMS` xmmsและเทียบเท่ากับ ` kill kill all` kill `pidof xmms`ในระบบอย่าง Solaris
  • pkill – คำสั่งที่ใช้ส่งสัญญาณเพื่อยุติกระบวนการทำงานโดยอิงจากชื่อและคุณลักษณะอื่นๆ คำสั่งนี้ถูกนำมาใช้ครั้งแรกใน Solaris 7 และได้รับการพัฒนาต่อยอดใน Linux, NetBSDและOpenBSD pkill ทำให้การยุติกระบวนการทำงานโดยอิงจากชื่อสะดวกยิ่งขึ้น เช่น หากต้องการยุติกระบวนการทำงานชื่อfirefoxโดยไม่ใช้ pkill (และไม่ใช้pgrep ) จะต้องพิมพ์คำสั่งkill `ps --no-headers -C firefox -o pid``pkill` แต่หากใช้ pkill ก็สามารถพิมพ์คำสั่ง `pkill` ได้pkill firefoxง่ายๆ
  • xkill – หากเรียกใช้โดยไม่มีพารามิเตอร์ใดๆ เคอร์เซอร์เมาส์จะเปลี่ยนจากลูกศรเป็นไอคอน "x" และผู้ใช้สามารถคลิกที่หน้าต่างเพื่อบังคับให้เซิร์ฟเวอร์ X ปิดการเชื่อมต่อกับไคลเอ็นต์ที่เป็นเจ้าของหน้าต่างนั้น ซึ่งมักจะทำให้กระบวนการหยุดทำงานเมื่อตรวจพบว่าการเชื่อมต่อกับเซิร์ฟเวอร์ X ถูกปิดไปแล้ว คำสั่งนี้ใช้งานได้เฉพาะบนระบบที่ใช้X11 เท่านั้น ตัวอย่างเช่น มันจะไม่ทำงานกับWayland compositor

ไมโครแวร์ OS-9

คำสั่ง นี้killยังมีให้ใช้งานในรูปแบบคำสั่งภายในของเชลล์ใน เชลล์ OS-9 ด้วย ใช้สำหรับฆ่ากระบวนการอื่นโดยใช้รหัสกระบวนการ[ 4 ]

หยุดกระบวนการที่มีรหัสกระบวนการ "7":

$ kill 7 

ไมโครซอฟต์ วินโดวส์ และ รีแอคโอเอส

คำtaskkillสั่งบนMicrosoft Windows

ใน Windows PowerShellซึ่งเป็นโปรแกรมแปลคำสั่งบรรทัดของ Microsoft นั้นkillมีชื่อเรียกแทนคำสั่ง ที่กำหนดไว้ล่วงหน้า สำหรับStop-Processcmdletดังกล่าว

Microsoft Windows XP , Vistaและ7มีคำสั่งtaskkill[ 5 ]สำหรับยุติกระบวนการ ไวยากรณ์ปกติของคำสั่งนี้คือtaskkill /im "IMAGENAME"เวอร์ชัน "ไม่ได้รับการสนับสนุน" ของkillถูกรวมอยู่ในชุดทรัพยากรMicrosoft Windows หลายเวอร์ชัน ที่มีให้สำหรับ Windows 98 [ 6 ]

เวอร์ชันGNUkillได้รับการพอร์ตผ่านCygwinและทำงานภายในระบบย่อยสภาพแวดล้อม Unix ที่Microsoft Windows Services for UNIXจัดหาให้ (Microsoft ได้รับ Windows Services for Unix ทั้งหมดผ่านการซื้อ Softway Systems และ ผลิตภัณฑ์ Interix ของพวกเขา เมื่อวันที่ 17 กันยายน 1999) [ 7 ]

คำtaskkillสั่งบนReactOS

การใช้งาน ReactOSนั้นอิงตามเวอร์ชัน Windows พัฒนาโดย Andrew Riedi, Andrew Nguyen และ He Yang ได้รับอนุญาตภายใต้LGPLv2.1 หรือเวอร์ชันที่ใหม่กว่า[ 8 ]

ตัวอย่าง

ค้นหาโปรเซสทั้งหมดที่ขึ้นต้นด้วยตัวอักษร "p" ซึ่งพัฒนาโดย Microsoft และใช้หน่วยความจำมากกว่า 10 MB แล้วทำการปิดโปรเซสเหล่านั้น:

PS C:\> ps p * | where { $_ . Company -like "Microsoft*" -and $_ . WorkingSet -gt 10MB } | kill -confirmยืนยันคุณแน่ใจหรือไม่ว่าต้องการดำเนินการนี้? กำลังดำเนินการ "หยุดกระบวนการ" บนเป้าหมาย "powershell (6832)" [Y] ใช่ [A] ใช่ทั้งหมด [N] ไม่ [L] ไม่ทั้งหมด [S] ระงับ [?] ช่วยเหลือ (ค่าเริ่มต้นคือ "Y"): A PS C:\>

ต่อไปนี้เป็นตัวอย่างที่ง่ายกว่า ซึ่งเป็นการสั่งให้กระบวนการExplorer.exeยุติการทำงาน:

PS C:\ > taskkill / im explorer.exe

ตัวอย่างนี้บังคับให้กระบวนการยุติลง:

PS C:\> taskkill / f / im explorer . exe

กระบวนการต่างๆ สามารถถูกยุติได้โดยใช้หมายเลข PID ของกระบวนการนั้นๆ :

PS C:\> taskkill / pid 3476

ไมโครซอฟต์ ซิงกูลาริตี้

Singularity shellซึ่งเป็นเชลล์มาตรฐานสำหรับระบบปฏิบัติการไมโครเคอร์เนลSingularityของMicrosoft Researchมีคำสั่งสำหรับยุติกระบวนการทำงานเบื้องหลัง kill

ตัวอย่าง

หยุดกระบวนการที่มีชื่อว่า "SampleProcess":

เอกภาวะ>ฆ่ากระบวนการตัวอย่าง 

หยุดกระบวนการที่มีรหัสกระบวนการ "42":

เอกภาวะ>ฆ่า 42 

แผน 9 จาก Bell Labs

ภายใต้แผน 9 จาก Bell Labsโปรแกรม kill ไม่ได้ทำการยุติกระบวนการจริง ๆ และไม่ได้ใช้รหัสกระบวนการ แต่จะใช้ชื่อจริงของกระบวนการและแสดงคำสั่งสำหรับrcซึ่งเป็นเชลล์ที่ใช้โดยแผน 9 เพื่อฆ่ากระบวนการ[ 9 ]

คำสั่งที่คล้ายกันนี้เรียกว่าslayซึ่งทำเช่นเดียวกันแต่สำหรับกระบวนการที่ไม่ยอมถูกฆ่าด้วยวิธีนี้[ 9 ]

ตัวอย่าง

ตัวอย่างเช่น หากต้องการกำจัดโปรแกรมtroff ทั้งหมด ให้พิมพ์:

ฆ่าโทรฟฟ์ | rc 

คนอื่น

คำ สั่ง killยังได้รับการพอร์ตไปยังระบบปฏิบัติการIBM i ด้วย [ 10 ]

ดูเพิ่มเติม

  • สัญญาณ
  • xkill
  • ฆ่าทั้งหมด
  • พีคิล
  • สัญญาณ.h
  • Alt-F4คือชุดปุ่มกดบนคอมพิวเตอร์เพื่อบังคับปิดแอปพลิเคชัน/โปรแกรม/หน้าต่างของ Microsoft Windows
  • กด Ctrl-Alt-Deleteหรือปุ่มลัดอื่นๆ ที่คล้ายกันบนคอมพิวเตอร์ เพื่อเรียกใช้งานวิธีการต่างๆ ในการบังคับปิด/ปิดแอปพลิเคชัน ขึ้นอยู่กับระบบปฏิบัติการและเวอร์ชัน

อ่านเพิ่มเติม

  • McElhearn, Kirk (2006). บรรทัดคำสั่ง Mac OS X: Unix Under the Hood . John Wiley & Sons . ISBN 978-0470113851.
ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=Kill_(command)&oldid=1340685360 "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ ฆ่า (คำสั่ง)

ในด้านคอมพิวเตอร์ คำสั่ง ` signal` killเป็นคำสั่งที่ใช้ในระบบปฏิบัติการ ยอดนิยมหลายระบบ เพื่อส่งสัญญาณไปยังกระบวนการ ที่กำลังทำงาน อยู่

ยูนิซและระบบปฏิบัติการที่คล้ายยูนิซ

ใน ระบบปฏิบัติการ Unix และระบบปฏิบัติการ ที่คล้าย Unix kill คำ สั่ง `kill` ใช้สำหรับส่ง สัญญาณ ไปยังกระบวนการ โดยค่าเริ่มต้น ข้อความที่ส่งคือ สัญญาณยุติ ซึ่งขอให้กระบวนการ ออกจาก ระบบ แต่ คำว่า `kill` อาจทำให้เข้าใจผิดได้...

ไมโครแวร์ OS-9

คำสั่ง นี้ kill ยังมีให้ใช้งานในรูปแบบ คำสั่งภายในของเชลล์ ใน เชลล์ OS-9 ด้วย ใช้สำหรับฆ่ากระบวนการอื่นโดยใช้รหัสกระบวนการ [ 4 ]

ไมโครซอฟต์ วินโดวส์ และ รีแอคโอเอส

ใน Windows PowerShell ซึ่งเป็นโปรแกรมแปลคำสั่งบรรทัดของ Microsoft นั้น kill มี ชื่อเรียกแทนคำสั่ง ที่กำหนดไว้ล่วงหน้า สำหรับ Stop-Process cmdlet ดังกล่าว