PDFORK(2) | FreeBSD System Calls Manual | PDFORK(2) |
名称
pdfork, pdgetpid, pdkill, pdwait4 — プロセス記述子を管理するためのシステムコールライブラリ
Standard C Library (libc, -lc)書式
#include < sys/procdesc.h> int
pdfork( int *fdp, int flags);
int
pdgetpid( int fd, pid_t *pidp);
int
pdkill( int fd, int signum);
int
pdwait4( int fd, int *status, int options, struct rusage *rusage);
解説
プロセス記述子は、プロセスを表し、成功するなら、 fdp によって指された整数のプロセス記述子を返す、 fork(2) の変異型である、 pdfork() を使用して作成される特殊なファイル記述子です。 pdfork() を通して作成されたプロセスは、終了時に SIGCHLD を引き起こしません。 pdfork() は、次のフラグを受け付けます:- PD_DAEMON
-
デフォルトのクローズ時の終了 (terminate-on-close) の振る舞いの代わりに、プロセスは、
kill(2) で明白に kill されるまで、生き続けることができます。
このオプションは、 capsicum(4) ケーパビリティモードで許可されません ( cap_enter(2) を参照)。
pdgetpid() は、プロセス記述子 fd で、プロセス ID (PID) を問い合わせます。
pdkill() は、PID でなく、プロセス記述子 fd を受け付けることを除いて、 kill(2) と機能的に同じです。
pdwait4() は、 wait4(2) と同様に振る舞いますが、PID でなくプロセス記述子の引数に対して動作します。
また、次のシステムコールは、プロセス記述子に特有の影響を与えます:
fstat(2) は、プロセス記述子の状態について問い合わせます。現在、 st_mode, st_birthtime, st_atime, st_ctime と st_mtime フィールドだけが定義されています。所有者の読み込み、書き込みと実行ビットが設定されているなら、プロセス記述子によって表されるプロセスは、まだ生きています。
poll(2) と select(2) は、プロセス状態遷移に対してウェートすることができます。現在、 POLLHUP だけが定義され、プロセスが死ぬとき、引き起こされます。
close(2) は、 PD_DAEMON が設定されていないなら、プロセス記述子をクローズします。プロセスがまだ生きていて、これがプロセス記述子への最後の参照であるなら、プロセスは、シグナル SIGKILL で終了されます。
pdfork と関連する関数は、 procdesc(4) に記述されている options PROCDESC に依存しています。
戻り値
pdfork() は、 fork(2) が行うように、PID、0 または -1 を返します。pdgetpid() と pdkill() は、成功すれば 0 を、失敗すれば -1 を返します。
pdwait4() は、成功すれば PID を、失敗すれば -1 を返します。
エラー
これらの関数は、次を追加して、それらの PID ベースと同等物と同じエラー番号を返します (例えば、 pdfork() は、 fork(2) と同じエラー番号を返します):- [ EINVAL]
- pdkill() へ与えられたシグナル番号が無効です。
- [ ENOTCAPABLE]
- 動作しているプロセス記述子には、十分な権利がありません (例えば、 pdkill() のための CAP_PDKILL)。
歴史
pdfork(), pdgetpid(), pdkill() と pdwait4() システムコールは、 FreeBSD 9.0 ではじめて登場しました。プロセス記述子モードのサポートは、 TrustedBSD プロジェクトの一環として開発されました。
作者
これらの関数とケーパビリティ機能は、Google Inc. からの助成金の支援によって University of Cambridge Computer Laboratory の <rwatson@FreeBSD.org>と <jonathan@FreeBSD.org>によって作成されました。バグ
pdwait4() は、まだ実装されていません。August 28, 2013 | FreeBSD |