“kill”명령이 왜 그렇게 호출됩니까?


17

kill"kill"명령 을 호출하기로 결정 했습니까?

그렇습니다.이 유틸리티는 종종 프로세스를 종료하는 데 사용되지만 실제로는 모든 신호를 보내는 데 사용할 수 있습니다.

약간 혼란스럽지 않습니까? 역사적인 이유가있을 수 있습니다.

에서 모든 알아요 man kill이 명령은 버전 3 AT & T UNIX에 등장.


8
분명히 당신은 당신 자신의 질문에 대답했습니다.이 명령은 오래 전에 프로세스를 종료하는 수단으로 시작되었습니다 (역사적 이유). 신호를 전송하는 도구를
갖추면

2
(하이퍼 볼) 스트레이트 유닉스에 대한 경험은 거의 없지만 명령 이름의 간결성과 관련이 있습니까? 예를 들어, 대부분의 명령은 "man", "ls", "cd" "mkdir"과 같은 매우 짧은 이름을 갖습니다. 터미널의 80 열 제한과 관련이있을 수 있습니다. 다시 한번, 나는 유닉스에 대한 경험이 많지 않아 확신 할 수 없다
Jamie Taylor

2
@JamieTaylor : 짧은 명령 이름의 주된 이유는 게으른 것입니다. 우리는 많이 입력하는 것을 좋아하지 않습니다. 나는 최근에 배운 cd호출하는 데 사용 chdir되는, 확실히 광기! 그런 공통 작업에 5 자? ;-)의 별칭 ls을 가진 사람들을 알고 있습니다l
Joachim Sauer

3
프로그래머가 assassinate그것을 사용할 때마다 타이핑하기에는 너무 게으
르기

1
@ shabunc-고마워, 내 대답의 순서가 오도 된 방법을 알 수 있으므로 더 직접적으로 대답하도록 순서를 바꿨습니다.
Mark Booth

답변:


23

원래 kill명령은 프로세스 만 종료 할 수 있으며 나중에 kill신호를 보낼 수 있도록 향상되었습니다.

Unix (1979) 7 버전부터 기본값은 프로세스를 포착 하고 정상적으로 처리하거나 무시할 수있는 방식으로 신호 를 보내는 것이 었지만 ( SIGTERM 신호 전송 ) 프로세스 (a kill -9SIGKILL 신호를 보내서 잡을 수 없으므로 무시할 수 없음).

배경

컴퓨팅, 특히 유닉스는 은유로 가득하다.

프로세스 에 대한 주요 은유 는 태어나고 살고 죽는 생물의 메타포입니다 .

유닉스에서는 init를 제외한 모든 프로세스 는 부모 를 가지며, 다른 프로세스를 생성 하는 프로세스는 자식을 가진다 . 프로세스가 고아 가 될 수 있고 (부모가 사망 한 경우) 사망 후 걸어 다니면 좀비 가 될 수 있습니다 .

따라서이 kill명령은이 은유에 적합합니다.

유닉스 고고학

로부터 매뉴얼 페이지 유닉스 (버전의 버전 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명령이 이미 과부하되어 신호를 보낼 수있었습니다.

로부터 유닉스 프로그래머 매뉴얼, 5 판 (P70) :

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

신호 15는 아직 존재하지 않기 때문에 기본값은 신호 9를 전송하는 것이 었습니다 (p150 참조).

버전 6kill 맨 페이지 더 이상 언급되지 같은 타자기 버그.

신호 15가 도입되고 ( v7 의 signal (2)kill (1) 매뉴얼 페이지 참조) kill신호 9를 사용하지 않고 해당 버전으로 전환 한 것은 유닉스 버전 7에서만 가능했습니다 .


26

유닉스입니다.

kill 프로세스를 죽일 수 없습니다.

mv 파일의 이름을 바꾸고 한 장소에서 다른 장소로 파일을 이동할 수있을뿐입니다.

touch 파일을 만들 수 있으며 마지막 수정 시간 만 변경할 수 있습니다.

od 8 진 덤프를 의미하지만 더 많은 종류의 덤프를 수행 할 수 있습니다.

yes 아니오를 출력 할 수 있습니다.

더 이국적인 :

greped동일한 작업을 수행 하는 명령의 이름을 따서 지정 됩니다.g/re/p

awk 저자는 Aho, Weinberger 및 Kernighan의 이름을 따서 명명되었습니다.

yacc또 다른 컴파일러 컴파일러를 의미합니다. 참고 bison는 GNU yacc에 있습니다.


17
완전히 공평하게, 파일 이동과 이름 바꾸기의 차이점은 다소 임의적입니다. 파일의 "이름 바꾸기"는 파일을 같은 디렉토리에있는 다른 위치로 옮기는 것입니다.
Tikhon Jelvis 9:30에

mv 새로운 inode (?)를 생성하고 파일 내용에 대한 참조를 이전 inode에서 새로운 inode로 옮깁니다. 동일한 장치에 있지 않은 경우를 제외하고. 그런 다음 내용을 복사하고 inode를 제거합니다.
Paul

3
재미있는 점은 다른 프로세스에서 열린 파일을 mv / rm 할 수 있다는 것입니다. 다른 프로세스에는 여전히 파일 내용에 대한 참조가 있습니다. 다른 OS와 다릅니다
Paul

yes와 혼동을 일으켜 +1도 no를 의미 함
Jamie Taylor

@Paul-나의 유닉스는 꽤 녹슬었지만 조금 뒤로 거꾸로 된 것 같습니다. inode는 파일의 고유 식별자입니다. 따라서 동일한 장치의 경우 동일한 inode를 가리키는 새 디렉토리 항목이 작성되고 원래 디렉토리 항목이 제거됩니다. 애플이 왜 "노이드"에 대해 누군가를 고소하지 않았는지 궁금하다.
OldFart

0

유닉스 버전 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.

그 명령 kill을 호출하지 않는 이유는 없습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.