HURD: 왜 원격 프로세스가 종료되지 않습니까?

HURD: 왜 원격 프로세스가 종료되지 않습니까?

대부분의 UNIX 시스템에서는 프로세스가 계속 실행되지 않습니다.

ssh example.net sleep 1000
<<CTRL-C>>

이 동작을 테스트했습니다.

aix
centos
debian
dragonfly
freebsd
hpux
irix
mandriva
miros
netbsd
openbsd
openindiana
qnx
redhat
scosysv
solaris-x86
solaris
suse
tru64
ubuntu
unixware

모두 예상대로 청소되었습니다. HURD에서는 로그인 쉘이 예상대로 종료되지만 sleep은 여전히 ​​init의 하위 프로세스로 실행 중입니다. 왜? 그리고 안심할 수 있습니까?

$ uname -a
GNU hurd 0.5 GNU-Mach 1.4-486/Hurd-0.5 i686-AT386 GNU

$ echo $SHELL
/bin/bash

$ /bin/bash --version
GNU bash, version 4.3.24(1)-release (i486-pc-gnu)
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

답변1

Hurd FAQ에서 이 사건에 대한 정보를 찾을 수 있습니다.

??로그인 쉘이란 무엇입니까?

{MB} Hurd는 로그인한 사용자라는 개념을 가지고 있습니다. 사용자에게 사용자 ID나 그룹 ID가 없습니다. 이는 Hurd가 uid 및 gid 세트를 지원하고 물론 빈 세트일 가능성이 있기 때문입니다. 이 경우, Hurd의 파일 시스템은 액세스를 거부하는 대신 자격 증명 없이 사용자에 대한 권한을 결정하는 데 사용되는 네 번째 권한 트리플(즉, rwx)을 제공합니다. 그러나 이 기능은 파일별로 활성화해야 합니다. 기본적으로 "기타" 권한 트리플이 사용됩니다.

Hurd 로그인 쉘은 uid나 gid를 사용하지 않고 실행되는 쉘입니다. 파일에 대한 액세스를 제한하려면 네 번째 권한 삼중항을 활성화 및 변경하거나, 표준 로그인 프롬프트에 대해 비밀번호 파일의 "login" 사용자에 대한 로그인 셸을 "/bin/loginpr"로 변경하세요.

Hurd는 UNIX가 아니라는 점을 기억하십시오. 이는 Match Microkernel을 사용하여 UNIX 커널을 대체하므로 UNIX의 많은 개념이 Hurd에 적용되지 않습니다.

Mach는 Carnegie Mellon University에서 작성된 마이크로커널입니다. 좀 더 설명적인 용어는 최대공약수 커널이라고 할 수 있습니다. 메모리 관리, 프로세스 간 통신, 프로세스 및 기타 여러 가지 기능과 같은 모든 "실제" 운영 체제에 공통적인 기능을 제공하기 때문입니다. 불행하게도 이러한 기능에 액세스하는 데 사용되는 시스템 호출은 익숙하고 소중한 Unix 시스템 호출과 막연하게만 관련되어 있습니다. "fork", "wait" 또는 "sleep" 시스템 호출도 없고 SIGHUP도 없습니다. 이 모든 것이 GNU Emacs를 Mach 머신으로 포팅하는 것을 상당히 어렵게 만듭니다.

인용하다:

관련 정보