Tại sao lệnh kill kill được gọi như vậy?


16

Tại sao nó lại quyết định gọi killlệnh "giết"?

Ý tôi là, vâng, tiện ích này thường được sử dụng để chấm dứt các quá trình, nhưng nó thực sự có thể được sử dụng để gửi bất kỳ tín hiệu nào.

Có phải nó hơi khó hiểu không? Có thể có một số lý do lịch sử.

Tất cả những gì tôi biết từ man killlệnh này đã xuất hiện trong Phiên bản 3 AT & T UNIX.


8
Chắc chắn bạn đã trả lời câu hỏi của riêng bạn, lệnh bắt nguồn như một phương tiện để chấm dứt các quá trình - một thời gian dài trước đây (lý do lịch sử). Khi bạn có một công cụ gửi tín hiệu gần như không thể tránh khỏi, nó sẽ được chuyển đổi lại ...
Murph

2
(hyperbole) Mặc dù tôi có rất ít kinh nghiệm với Unix thẳng, nhưng nó có thể liên quan đến sự ngắn gọn của các tên lệnh không? Hầu hết các lệnh có tên rất ngắn "man", "ls", "cd" "mkdir" chẳng hạn. Có lẽ nó liên quan đến giới hạn 80 cột cho thiết bị đầu cuối. Một lần nữa, tôi không thể chắc chắn vì tôi chưa có nhiều kinh nghiệm với Unix thẳng
Jamie Taylor

2
@JamieTaylor: Tôi nghĩ lý do chính cho tên lệnh ngắn là sự lười biếng. Chúng tôi không muốn gõ nhiều. Gần đây tôi đã biết rằng đã cdtừng được gọi chdir, đó chắc chắn là sự điên rồ! 5 ký tự cho một hoạt động phổ biến như vậy? Tôi biết những người bí danh lsđể l;-)
Joachim Sauer

3
Bởi vì các lập trình viên quá lười biếng để gõ assassinatemỗi lần họ sử dụng nó
briddums

1
@shabunc - Cảm ơn, tôi có thể thấy thứ tự câu trả lời của tôi có thể bị sai lệch như thế nào, vì vậy tôi đã đặt hàng lại để làm cho câu trả lời trực tiếp hơn.
Đánh dấu gian hàng

Câu trả lời:


22

Ban đầu, killlệnh chỉ có thể giết một tiến trình, chỉ sau đó được killtăng cường để cho phép bạn gửi bất kỳ tín hiệu nào.

Kể từ phiên bản 7 của Unix (1979), mặc định đã báo hiệu quá trình theo cách có thể bắt và xử lý một cách duyên dáng hoặc bỏ qua (bằng cách gửi tín hiệu SIGTERM ), nhưng nó cũng có thể được sử dụng để kéo tấm thảm ra từ bên dưới một quá trình (a kill -9gửi tín hiệu SIGKILL không thể bắt được và do đó không thể bỏ qua).

Lý lịch

Máy tính và Unix nói riêng, đầy rẫy những ẩn dụ.

Ẩn dụ chính cho các quá trình là một sinh vật được sinh ra, sống và chết.

Trong Unix tất cả các quy trình ngoại trừ init đều có cha mẹ và bất kỳ quy trình nào sinh ra các quy trình khác đều có con . Quá trình có thể trở thành mồ côi (nếu cha mẹ của họ chết) và thậm chí có thể trở thành thây ma , nếu họ quanh quẩn sau khi chết.

Vì vậy, killlệnh phù hợp với ẩn dụ này.

Khảo cổ học Unix

Từ trang hướng dẫn từ phiên bản 4 của Unix (phiên bản killđược giới thiệu cùng với ps) chúng tôi tìm thấy:

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)

Tôi đặc biệt thích phần cuối cùng của trang người đàn ông này:

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

Vào thời điểm phiên bản thứ năm xuất hiện, killlệnh đã bị quá tải để cho phép bất kỳ tín hiệu nào được gửi.

Từ Hướng dẫn lập trình viên Unix, Phiên bản thứ năm (p70):

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

Mặc định mặc định là gửi tín hiệu 9, vì tín hiệu 15 chưa tồn tại (xem p150).

Với phiên bản 6 , killtrang man không còn đề cập đến lỗi máy đánh chữ tương tự .

Chỉ với phiên bản 7 của Unix, tín hiệu 15 đã được giới thiệu (xem phần tín hiệu (2)giết (1) trang man cho v7) và killchuyển sang đó thay vì sử dụng tín hiệu 9.


26

Đây là Unix.

kill không thể giết chết một quá trình.

mv có thể đổi tên và không chỉ di chuyển các tệp từ nơi này sang nơi khác.

touch có thể tạo một tệp và không chỉ thay đổi thời gian sửa đổi cuối cùng của nó.

od có nghĩa là bãi rác Octal, nhưng có thể thực hiện nhiều loại bãi khác.

yes có thể xuất không.

Kỳ lạ hơn:

grepđược đặt tên theo edlệnh thực hiện thao tác tương tự:g/re/p

awk được đặt theo tên của các tác giả của nó: Aho, Weinberger và Kernighan.

yacccó nghĩa là trình biên dịch trình biên dịch khác. Lưu ý rằng đó bisonlà GNU yacc.


17
Để hoàn toàn công bằng, sự khác biệt giữa di chuyển và đổi tên một tệp là khá tùy tiện. "Đổi tên" một tập tin chỉ là di chuyển nó đến một vị trí khác trong cùng một thư mục.
Tikhon Jelvis

mv tạo một inode mới (?) và di chuyển tham chiếu đến nội dung tệp từ inode cũ sang cái mới. Ngoại trừ khi nó không trên cùng một thiết bị. Sau đó, nó sao chép nội dung và loại bỏ các nút.
Paul

3
Điều thú vị nữa là bạn có thể mv / rm một tệp được mở bởi một quy trình khác. Quá trình khác vẫn có một tham chiếu đến nội dung tập tin. Khác với các hệ điều hành khác
Paul

+1 vì nhầm lẫn tôi với có cũng có nghĩa là không
Jamie Taylor

@Paul - Unix của tôi khá là rỉ sét, nhưng tôi nghĩ bạn có một chút lạc hậu. Inode là định danh duy nhất của tập tin. Vì vậy, trong cùng một trường hợp thiết bị, một mục nhập thư mục mới được tạo chỉ vào cùng một nút và sau đó mục nhập thư mục gốc sẽ bị xóa. Tôi tự hỏi tại sao Apple không kiện ai đó về "inode".
OldFart

0

Phiên bản Unix giết 7 trang thủ công :

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.

Sẽ không có lý do gì để không gọi lệnh giết đó chắc chắn là phép ẩn dụ tốt nhất hiện có.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.