ฆ่า (คำสั่ง)

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

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

การดำเนินการ

Unix และ Unix เหมือน

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

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

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

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

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

ตัวอย่าง

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

ฆ่า1234 ฆ่า -s เทอม1234 ฆ่า -TERM 1234 ฆ่า -15 1234 
   
  
  

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

ฆ่า  -s  ฆ่า1234 ฆ่า - ฆ่า1234 ฆ่า -9 1234 
  
  

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

โปรแกรมที่เกี่ยวข้อง

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

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

คำสั่ง นี้killยังมีอยู่ในเชลล์OS-9อีก ด้วย มันถูกใช้เพื่อฆ่ากระบวนการอื่นด้วย ID กระบวนการ[4]

หยุดกระบวนการด้วยรหัสกระบวนการ "7":

$ ฆ่า 7

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

คำtaskkillสั่งบนMicrosoft Windows

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

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

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

คำtaskkillสั่งบนReactOS

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

ตัวอย่าง

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

ป.ล.:\ > ป.ล. * |  โดยที่{ $_ . บริษัทเหมือน"Microsoft*" -และ$ _ WorkingSet -gt 10MB } | ฆ่า-ยืนยัน           

ยืนยัน
คุณแน่ใจหรือไม่ว่าต้องการดำเนินการนี้
ดำเนินการ "หยุดกระบวนการ" บนเป้าหมาย "powershell (6832)" 
[Y] ใช่ [A] ใช่ทั้งหมด [N] ไม่ใช่ [L] ไม่ใช่ทั้งหมด [S] ระงับ [?] ความช่วยเหลือ (ค่าเริ่มต้นคือ "Y"): A 
PS C:\>

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

ป.ล. C:\> taskkill  / im  explorer อดีต

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

ป.ล. C:\> taskkill  / f  / im  explorer อดีต

กระบวนการสามารถถูกฆ่าได้ด้วยหมายเลข PID :

PS C:\> ทาสก์คิล / pid  3476

ความเป็นเอกเทศของไมโครซอฟต์

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

ตัวอย่าง

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

ภาวะเอกฐาน> ฆ่า SampleProcess

หยุดกระบวนการด้วยตัวระบุกระบวนการ "42":

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

แผน 9 จาก Bell Labs

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

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

ตัวอย่าง

ตัวอย่างเช่น หากต้องการฆ่าอินสแตนซ์ทั้งหมดของtroffมีประเภทหนึ่ง:

ฆ่า troff | ร.ต

คนอื่น

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

ดูสิ่งนี้ด้วย

อ้างอิง

  1. ^ "คู่มืออ้างอิง Bash: บิลด์ควบคุมงาน" โครงการกนู สืบค้นเมื่อ 2015-02-24 .
  2. ^ "zsh: 17. คำสั่งเชลล์ในตัว" สืบค้นเมื่อ 2015-02-24 .
  3. "<signal.h>". ข้อกำหนดเฉพาะของ Open Group Base ฉบับที่7 สืบค้นเมื่อ 2015-02-24 .
  4. พอล เอส. ดายัน (1992) กูรู OS-9 - 1 : ข้อเท็จจริงกาแลกติกอุตสาหกรรม จำกัดไอเอสบีเอ็น 0-9519228-0-7-
  5. "ทาซคิลล์". ไมโครซอฟต์ เทคเน็ต. สืบค้นเมื่อ 2015-02-24 .
  6. "ยูทิลิตี้ชุดทรัพยากร - ชุดทรัพยากร Windows '98" ซอฟต์แวร์ ActiveXperts เก็บถาวรจากต้นฉบับเมื่อ 2019-05-25 . สืบค้นเมื่อ 2015-02-24 .
  7. ^ "ยูทิลิตี้ GNU สำหรับ Win32" เก็บถาวรจากต้นฉบับเมื่อ 2006-02-09 . สืบค้นเมื่อ 2015-02-24 .
  8. reactos/taskkill.c ที่ต้นแบบ · reactos/reactos · GitHub
  9. ↑ ab "การแปลคำสั่ง UNIX เป็น Plan 9" แผน 9 วิกิ เก็บถาวรจากต้นฉบับเมื่อ 2008-09-05 . สืบค้นเมื่อ 2015-02-24 .
  10. ไอบีเอ็ม . "การเขียนโปรแกรม IBM System i เวอร์ชัน 7.2 Qshell" (PDF ) ไอบีเอ็ม . สืบค้นเมื่อ 2020-09-05 .

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

ลิงค์ภายนอก

ดึงมาจาก "https://en.wikipedia.org/w/index.php?title=Kill_(command)&oldid=1224844903#Unix_and_Unix-like"