web-dev-qa-db-ja.com

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では、ログインシェルは期待どおりに強制終了されますが、スリープは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.
6
Ole Tange

Hurdの内部FAQこのケースに関するいくつかの情報を見つけることができます:

??ログインシェルとは何ですか?

{MB} Hurdには、ログインしていないユーザーという概念があります。このユーザーには、ユーザーIDもグループIDもありません。これは、Hurdがuidセットとgidセットをサポートしているという事実に起因しており、1つの可能性はもちろん空のセットです。この場合、アクセスを拒否するのではなく、Hurdのファイルシステムは、資格情報を持たないユーザーの特権を決定するために使用される4番目のパーミッショントリプレット(つまり、rwx)を提供します。ただし、これはファイルごとに有効にする必要があります。デフォルトでは、「その他」の権限トリプレットが使用されます。

Hurdログインシェルは、uidもgidも使用せずに実行されるシェルです。ファイルへのアクセスを制限するには、4番目の権限トリプレットを有効にして変更するか、パスワードファイルの「login」ユーザーのログインシェルを「/ bin/loginpr」に変更します。これにより、標準のログインプロンプトが実装されます。

また、HurdはUNIXではないことを忘れないでください。これは、Match Microkernelを使用したUNIXカーネルの代替であるため、UNIXの概念の多くはHurdには適用できません。

マッハは、カーネギーメロン大学で書かれたマイクロカーネルです。より説明的な用語は、メモリ管理、プロセス間通信、プロセス、その他の多くのものなど、すべての「実際の」オペレーティングシステムに共通の機能を提供するため、最大公約数カーネルである可能性があります。残念ながら、これらの機能にアクセスするために使用されるシステムコールは、おなじみの大切なUnixシステムコールに漠然と関連しているだけです。 「フォーク」、「待機」、または「スリープ」システムコールはなく、SIGHUPもありません。そのようなものはありません。これらすべてが、たとえば、GNU EmacsをMachボックスに移植することをかなり難しくしています。

参照:

1
user34720