ทำไมคำสั่ง“ ฆ่า” จึงเรียกว่า


17

เหตุใดจึงตัดสินใจเรียกkillคำสั่ง "ฆ่า"

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

มันสับสนเล็กน้อยใช่ไหม อาจมีเหตุผลทางประวัติศาสตร์บางอย่าง

ทั้งหมดที่ฉันรู้จากman killคำสั่งนี้ปรากฏในเวอร์ชัน 3 AT&T UNIX


8
แน่นอนว่าคุณได้ตอบคำถามของคุณเองแล้วคำสั่งนี้มีจุดเริ่มต้นในการยุติกระบวนการ - เมื่อนานมาแล้ว (เหตุผลทางประวัติศาสตร์) เมื่อคุณมีเครื่องมือที่จะส่งสัญญาณหลีกเลี่ยงไม่ได้เกือบที่จะได้รับการ repurposed ที่ ...
Murph

2
(อติพจน์) แม้ว่าฉันจะมีประสบการณ์น้อยมากเกี่ยวกับ Unix ที่ตรงไปตรงมา แต่มันอาจเกี่ยวข้องกับความกะทัดรัดของชื่อคำสั่งหรือไม่? คำสั่งส่วนใหญ่มีชื่อสั้น ๆ "man", "ls", "cd" "mkdir" เป็นต้น อาจเกี่ยวข้องกับการ จำกัด 80 คอลัมน์สำหรับเทอร์มินัล อีกครั้งฉันไม่สามารถมั่นใจได้เพราะฉันไม่ได้รับประสบการณ์จำนวนมากกับ Unix ตรง
Jamie Taylor

2
@JamieTaylor: ฉันคิดว่าเหตุผลหลักสำหรับชื่อคำสั่งสั้น ๆ คือความขี้เกียจ เราไม่ชอบพิมพ์มากนัก ฉันเพิ่งเรียนรู้ที่cdเคยถูกเรียกว่าchdirซึ่งบ้าแน่นอน ! 5 ตัวอักษรสำหรับการดำเนินการทั่วไปเช่น? ฉันรู้ว่าคนที่ชื่อแทนlsเพื่อl;-)
โจอาคิมซาวเออร์

3
เนื่องจากโปรแกรมเมอร์เขียนโปรแกรมขี้เกียจเกินกว่าที่จะพิมพ์ในassassinateแต่ละครั้งที่ใช้
briddums

1
@shabunc - ขอบคุณฉันสามารถดูว่าคำสั่งของฉันอาจทำให้เข้าใจผิดได้อย่างไรดังนั้นฉันจึงสั่งให้คำตอบอีกครั้งเพื่อให้เป็นคำตอบที่ตรงกว่านี้
Mark Booth

คำตอบ:


23

ในขั้นต้นkillคำสั่งสามารถฆ่ากระบวนการเพียงอย่างเดียวในภายหลังได้รับการkillปรับปรุงเพื่อให้คุณสามารถส่งสัญญาณใด ๆ

ตั้งแต่เวอร์ชัน 7 ของ Unix (1979) ค่าเริ่มต้นคือการส่งสัญญาณกระบวนการในลักษณะที่สามารถถูกจับได้และจัดการได้อย่างสง่างามหรือถูกละเว้น (โดยการส่งสัญญาณSIGTERM ) แต่ก็สามารถใช้ดึงพรมออกจากใต้ กระบวนการ (a kill -9ส่งสัญญาณSIGKILLซึ่งไม่สามารถจับได้และไม่สามารถข้ามได้)

พื้นหลัง

คอมพิวเตอร์และยูนิกซ์โดยเฉพาะนั้นเต็มไปด้วยคำอุปมา

อุปมาหลักสำหรับกระบวนการคือสิ่งมีชีวิตที่เกิดชีวิตและตาย

ในระบบปฏิบัติการยูนิกซ์กระบวนการทั้งหมดยกเว้นinitมีพ่อแม่ผู้ปกครองและกระบวนการใด ๆ ที่spawnsกระบวนการอื่น ๆ ที่มีเด็ก กระบวนการอาจกลายเป็นเด็กกำพร้า (ถ้าพ่อแม่ของพวกเขาเสียชีวิต) และอาจกลายเป็นซอมบี้ได้หากพวกเขาแขวนรอบหลังความตาย

ดังนั้นkillคำสั่งที่สอดคล้องกับคำอุปมานี้

โบราณคดียูนิกซ์

จากหน้าคู่มือจาก Unix รุ่น 4 (รุ่นที่killมีการแนะนำพร้อมด้วยps) เราพบ:

NAME
        kill - do in an unwanted process
SYNOPSIS
        kill processid ...
DESCRIPTION
        Kills the specified processes.
        The processid of each asynchronous process
        started with `&' is reported by the shell.
        Processid's can also be found by using ps (I).

        The killed process must have
        been started from the same typewriter
        as the current user, unless
        he is the superuser.
SEE ALSO
        ps(I), sh(I)

ฉันชอบหน้าสุดท้ายของหน้านี้โดยเฉพาะ:

BUGS
        Clearly people should only be allowed to kill
        processes owned by them, and having the same typewriter
        is neither necessary nor sufficient.

เมื่อถึงเวลาฉบับที่ห้าkillคำสั่งที่ได้รับการโอเวอร์โหลดเพื่ออนุญาตให้ส่งสัญญาณใด ๆ

จากคู่มือโปรแกรมเมอร์ Unix, Fifth Edition (p70):

If a signal number preceded by "-" is given
as an argument, that signal is sent instead of
kill (see signal (II)).

แม้ว่าจะเป็นค่าเริ่มต้นคือการส่งสัญญาณ 9 เนื่องจากสัญญาณ 15 ยังไม่มีอยู่ (ดูหน้า 150)

กับรุ่น 6killหน้าคนไม่ได้กล่าวถึงเครื่องพิมพ์ดีดเดียวกันข้อผิดพลาด

มันเป็นเพียงกับรุ่นที่ 7 ของ Unix ที่มีการแนะนำสัญญาณ 15 (ดูที่สัญญาณ (2)และkill (1) man pages สำหรับ v7) และkillสลับไปที่แทนที่จะใช้สัญญาณ 9


26

นี่คือ Unix

kill ไม่สามารถฆ่ากระบวนการ

mv สามารถเปลี่ยนชื่อและไม่เพียง แต่ย้ายไฟล์จากที่หนึ่งไปอีกที่หนึ่ง

touch สามารถสร้างไฟล์และไม่เพียง แต่เปลี่ยนเวลาแก้ไขล่าสุด

od หมายถึง Octal Dump แต่สามารถทำการทิ้งได้หลายประเภท

yes สามารถส่งออกหมายเลข

แปลกใหม่มากขึ้น:

grepถูกตั้งชื่อตามedคำสั่งที่ทำการดำเนินการเดียวกัน:g/re/p

awk ถูกตั้งชื่อตามผู้แต่ง: Aho, Weinberger และ Kernighan

yaccหมายความว่า Yet คอมไพเลอร์อื่น โปรดทราบว่าbisonเป็น GNU yacc


17
เพื่อความเป็นธรรมโดยสิ้นเชิงความแตกต่างระหว่างการย้ายและการเปลี่ยนชื่อไฟล์นั้นค่อนข้างเป็นการกำหนดเอง "การเปลี่ยนชื่อ" ไฟล์กำลังย้ายไฟล์ไปยังตำแหน่งอื่นซึ่งเกิดขึ้นในไดเรกทอรีเดียวกัน
Tikhon Jelvis

mv สร้าง inode ใหม่ (?) และย้ายการอ้างอิงไปยังเนื้อหาไฟล์จาก inode เก่าไปยังใหม่ ยกเว้นเมื่อไม่ได้อยู่ในอุปกรณ์เดียวกัน จากนั้นก็คัดลอกเนื้อหาและลบไอโหนด
Paul

3
สิ่งที่สนุกคือคุณสามารถ mv / rm ไฟล์ที่เปิดโดยกระบวนการอื่น กระบวนการอื่นยังคงมีการอ้างอิงเนื้อหาไฟล์ แตกต่างจากระบบปฏิบัติการอื่น ๆ
Paul

+1 สำหรับฉันทำให้สับสนด้วยใช่ยังไม่มีความหมาย
Jamie Taylor

@Paul - Unix ของฉันค่อนข้างเป็นสนิม แต่ฉันคิดว่าคุณมีมันล้าหลังนิดหน่อย inode เป็นตัวบ่งชี้เฉพาะของไฟล์ ดังนั้นในกรณีอุปกรณ์เดียวกันรายการไดเรกทอรีใหม่จะถูกสร้างขึ้นชี้ไปที่ไอโหนดเดียวกันจากนั้นรายการไดเรกทอรีดั้งเดิมจะถูกลบออก ฉันสงสัยว่าทำไม Apple ถึงไม่ฟ้องใครเรื่อง "inode"
OldFart

0

สถานะเพจคู่มือการฆ่า Unix เวอร์ชัน 7 :

kill - terminate a process with extreme prejudice

และ

This will kill processes that do not catch the signal; in particular `kill -9 ...'  is a sure kill.

คงไม่มีเหตุผลใดที่จะไม่เรียกคำสั่งฆ่านั้นซึ่งเป็นคำเปรียบเทียบที่ดีที่สุด

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.