- "プロセス ID (Process ID)"
-
システム内のアクティブな各プロセスは、プロセス ID と呼ばれる
負でない整数によって一意に識別されます。
この ID の範囲は 0 から 99999 までです。
- "親プロセス ID (Parent process ID)"
-
新しいプロセスは、現在のアクティブなプロセスから作成されます
(fork2
を参照)。
プロセスの親プロセス ID は、
最初はそれを作成したプロセスのプロセス ID となっています。
そのプロセスを作成したプロセスが exit した場合、
それぞれの子プロセスの親プロセス ID は、システムプロセス
init(8)
の ID に設定されます。
- "プロセスグループ (Process Group)"
-
アクティブなプロセスはそれぞれがあるプロセスグループのメンバであり、
プロセスグループはプロセスグループ ID と呼ばれる
負でない整数によって識別されます。
プロセスグループ ID はそのグループのリーダのプロセス ID です。
このグループ化によって、
関連づけられたプロセスの集団にシグナルを送る
(termios4
を参照) ことや、
csh(1)
のジョブ制御機構を可能にします。
- "セッション (Session)"
-
セッションは 1 つ以上のプロセスグループの集合です。
セッションは
setsid(2)
の呼び出しが成功すると作成されます。
これによって、呼び出したプロセスは、新規のセッションが
1 つだけ持つプロセスグループの唯一のメンバになります。
- "セッションリーダ (Session leader)"
-
setsid(2)
の呼び出しの成功によって、新しいセッションを作成したプロセスは、
セッションリーダとして知られます。
端末を自分が制御する端末
(termios4
を参照) として取得できるのは、セッションリーダだけです。
- "制御プロセス (Controlling process)"
-
制御端末を持つセッションリーダが制御プロセスです。
- "制御端末 (Controlling terminal)"
-
セッションに関連づけられている端末は、そのセッションとそのメンバに対する
制御端末として知られます。
- "端末プロセスグループ ID (Terminal Process Group ID)"
-
端末は、セッションリーダによって制御端末として取得されます。
ひとたび端末がセッションに関連づけられると、
端末プロセスグループ ID をプロセスグループの ID に設定することによって、
そのセッション内のどのプロセスグループでも、
フォアグラウンドに置くことができるようになります。
この機能は、同じ端末をめぐり競合している複数のジョブの間で
調停を行うために用いられます
(csh1
と
tty(4)
を参照)。
- "親のないプロセスグループ (Orphaned Process Group)"
-
プロセスグループは、ジョブ制御を行うシェルの制御下にない場合、
親なしになった
とみなされます。
より正確に言うと、そのプロセスグループのメンバはどれも、
そのグループと同じセッションに属す親プロセスを持たず、かつ、
親プロセスが別のプロセスグループに属す場合、
そのプロセスグループは親なしになります。
なお、プロセスが終了するとき、その子プロセスの親プロセスは
init(8)
となるように変更されます。
そしてこれは別個のセッションになります。
親のないプロセスグループのメンバの全てが、必ずしも
親のないプロセス (プロセスを作成したプロセスが終了した)
というわけではありません。
この定義により、セッションリーダのプロセスグループは親なしになります。
- "実ユーザ ID と実グループID (Real User ID and Real Group ID)
-
システム上の各ユーザは、実ユーザ ID と呼ばれる正の整数によって識別されます。
各ユーザは、1 つまたは複数のグループのメンバでもあります。
これらのグループの 1 つは他のものから区別され、
アカウンティング機能を実現するのに使用されます。
この区別されたグループに対応する正の整数は、実グループ ID と呼ばれます。
すべてのプロセスは実ユーザ ID と実グループ ID を持っています。
これらは、そのプロセスを作成したプロセスと等価な属性値を
使って初期化されます。
- "実効ユーザ ID、実効グループ ID、グループアクセスリスト (Effective User Id, Effective Group Id, and Group Access List)"
-
システムリソースへのアクセスは、実効ユーザ ID とグループアクセスリストという
2 つの値を使って決定されます。
グループアクセスリストの最初のメンバは、実効グループ ID
としても知られています
(POSIX.1 では、グループアクセスリストは、補助グループ ID の
セットとして知られ、実効グループ ID がリストのメンバで
あるかどうかは未規定です)。
実効ユーザ ID と実効グループ ID は、最初はそれぞれ、
プロセスの実ユーザ ID と実グループ ID です。
いずれも (おそらくその先祖のいずれかが) ユーザ ID 設定ファイルまたは
グループ ID 設定ファイルを実行することにより変更することができます
(execve2
を参照してください)。
慣習で、実効グループ ID
(グループアクセスリストの最初のメンバ) は複製されるので、
グループ ID 設定プログラムの実行の結果、もともと持っていた
(実) グループ ID が失われることはありません。
グループアクセスリストは、リソースへのアクセスが可能かどうかを
決定するためにだけ使用されるグループ ID の集合です。
アクセスチェックは、以降の
``ファイルアクセスパーミッション''
で説明するように行われます。
- "退避ユーザ ID と退避グループ ID (Saved Set User ID and Saved Set Group ID)"
-
プロセスが新しいファイルを実行するとき、ファイルがユーザ ID 設定であれば、
実効ユーザ ID はそのファイルの所有者に設定され、
ファイルがグループ ID 設定であれば、
実効グループ ID (グループアクセスリストの最初の要素) は
ファイルのグループに設定されます。
それからプロセスの実効ユーザ ID は退避ユーザ ID として記録され、
プロセスの実効ユーザ ID は退避グループ ID として記録されます。
これらの記録された値は、実 ID
(setuid2
を参照) に戻った後で、実効ユーザ ID または実効グループ ID をこれらの
値に回復するために利用できます。
(POSIX.1 では、退避ユーザ ID と退避グループ ID はオプションであり、
setuid および setgid の内部で使用されますが、
これはスーパユーザについて意図どおりには機能しません)。
- "スーパユーザ (super-user)"
-
実効ユーザ ID が 0 の場合、そのプロセスは
スーパユーザ
プロセスとして認識され、特別な権利が認められます。
- "記述子 (Descriptor)"
-
open(2),
dup(2)
によってファイルが参照されるとき、または
pipe(2),
socket(2),
socketpair(2)
によってソケットが作成されるときにシステムによって割り当てられる整数です。
この整数は、指定のプロセスやその子プロセスから、
そのファイルやソケットへのアクセスパスを一意に識別します。
- "ファイル名 (File Name)"
-
最高
Br q Dv NAME_MAX
文字からなる名前であって、通常ファイル、特殊ファイル、
ディレクトリに名前を付けるのに使用されます。
これらの文字は、
NUL
( ASCII
0)
および
`/'
文字 (スラッシュ、
ASCII
47) を除く、
任意の 8 ビット値から選択できます。
なお、一般に、ファイル名の一部として
`*'
,
`?'
,
`['
,
`]'
を使用するのは賢明ではありません。
シェルによってこれらの文字には特殊な意味がつけられるからです。
- "パス名 (Path Name)"
-
パス名は、
NUL
で終端された文字列です。
スラッシュ
`/'
(省略可能) で始まり、スラッシュで区切られた 0 個以上のディレクトリ名が続き、
ファイル名 (省略可能) が続きます。
パス名の長さの合計は
Br q Dv PATH_MAX
文字未満である必要があります
(あるシステム上では、この制限は無制限かもしれません)。
パス名がスラッシュで始まる場合、パス検索は
ルート
ディレクトリから開始します。
そうでない場合、検索は現在の作業ディレクトリから開始します。
スラッシュだけの場合、ルートディレクトリを指定します。
空のパス名は現在のディレクトリを指します。
- "ディレクトリ (Directory)"
-
ディレクトリは特殊なタイプのファイルであり、他のファイルを参照する
エントリを含んでいます。
ディレクトリエントリをリンクと呼びます。
伝統的に、ディレクトリには少なくとも 2 つのリンク、
`.'
と
`..'
を含みます。
これらはそれぞれ
ドット
および
ドット-ドット
と呼ばれます。
ドットは、そのディレクトリ自体を指し、
ドット-ドットはその親ディレクトリを指します。
- "ルートディレクトリと現在の作業ディレクトリ (Root Directory and Current Working Directory)"
-
各プロセスは、ルートディレクトリと現在の作業ディレクトリという
概念を持つとされてきました。
これらの概念はパス名検索を解決する際に用いられます。
プロセスのルートディレクトリは、
ルートファイルシステムのルートディレクトリである必要はありません。
- "ファイルアクセスパーミッション (File Access Permission)"
-
ファイルシステム内の各ファイルはアクセスパーミッションの
集合を持っています。
これらのパーミッションは、プロセスがファイルについて要求された操作
(たとえば、書込み用にファイルをオープンする) を行ってもよいかどうかを
判定するのに使用されます。
アクセスパーミッションはファイルが作成されたときに設定されます。
アクセスパーミッションは
chmod(2)
呼び出しを用いて後から変更することもできます。
ファイルアクセスでは、ファイルが読取りが許されているかどうか、
書込みが許されているかどうか、実行が許されているかどうか、によって
分類されます。
ディレクトリファイルでは、ディレクトリを検索してもよいかどうかを
制御するのに実行パーミッションを使用します。
システムがファイルアクセスパーミッションを解釈するにあたり、
ユーザの 3 つの異なるクラス (ファイルの所有者、
ファイルのグループ内のユーザ、その他) のどれに適用するかによって解釈します。
各ファイルは、これらの各クラスについて、
独立したアクセスパーミッションの集合を持っています。
アクセスチェックが行われると、システムは、
呼び出し側に適用できるアクセス情報をチェックすることによって、
パーミッションが認可されるかどうかを判定します。
ファイルについての読取り、書込み、実行 / 検索の
各パーミッションは、次の場合にプロセスに認可されます。
プロセスの実効ユーザ ID がスーパユーザである場合
(注: スーパユーザであっても、実行可能でないファイルを実行する
ことはできません)。
プロセスの実効ユーザ ID がファイルの所有者のユーザ ID に一致し、
所有者のパーミッションがアクセスを許可している場合。
プロセスの実効ユーザ ID がファイルの所有者のユーザ ID と一致せずに、
プロセスの実効グループ ID がファイルのグループ ID と一致するか
またはファイルのグループ ID がプロセスのグループアクセスリスト内に
あるかのどちらかであり、グループパーミッションがアクセスを許容している場合。
プロセスの実効ユーザ ID も実効グループ ID もグループアクセスリストも、
ファイルの対応するユーザ ID およびグループ ID と一致しないが、
``その他のユーザ'' のパーミッションがアクセスを許容する場合。
上記のいずれにも該当しない場合、パーミッションは拒絶されます。
- "ソケットとアドレスファミリ (Sockets and Address Families)"
-
ソケットはプロセス間の通信の端点です。
各ソケットには、データ送信用および受信用の待ち行列があります。
ソケットには、通信の性質によったタイプがあります。
これらの性質には、ソケットで送受信されるメッセージに
相手の名前が必要かどうか、通信に信頼性があるかどうか、
メッセージ受信者を名付ける際に使用される形式などが含まれます。
実際のシステムはそれぞれ、いくつかのソケットタイプの集合をサポートしています。
利用できるタイプおよびそれらのプロパティの詳細については、
socket(2)
を参照してください。
実際のシステムはそれぞれ、いくつかの通信プロトコルの集合を
サポートしています。
プロトコルの集合はそれぞれある特定の形式のアドレスをサポートします。
アドレスファミリは、あるプロトコルのグループに対応するアドレスの集合です。
ソケットはそれぞれ、ソケットが作成されたアドレス
ファミリから選択したアドレスを持ちます。