Trusted Solaris 開発ガイド

プロセスのフォーク

子プロセスがフォークによって作成される場合、そのプロセス特権セットは親のプロセス特権セットと同じです。これは、プロセス特権セットの照会、プロセスのフォーク、および子プロセスの特権セットの照会によって確認できます。

親プロセスの特権セット

fork の実行前は、親プロセスには次の特権が含まれます。

Forked Inheritable = proc_setid

Forked Saved = file_setpriv$proc_setid

Forked Permitted = file_setpriv$proc_setid

Forked Effective = none

システムコールとコード

pid = fork();
 if (pid > 0)
 	exit(0);

 PRIV_EMPTY(&priv_get);
 retval = getppriv(PRIV_INHERITABLE, &priv_get);
 printf("retval = %d errno = %d¥n", retval, errno);
 priv_set_to_str(&priv_get, '$', buffer, &length);
 printf("Forked Inheritable = %s¥n", buffer);

 PRIV_EMPTY(&priv_get);
 retval = getppriv(PRIV_SAVED, &priv_get);
 printf("retval = %d errno = %d¥n", retval, errno);
 priv_set_to_str(&priv_get, '$', buffer, &length);
 printf("Forked Saved = %s¥n", buffer);

 PRIV_EMPTY(&priv_get);
 retval = getppriv(PRIV_PERMITTED, &priv_get);
 printf("retval = %d errno = %d¥n", retval, errno);
 priv_set_to_str(&priv_get, '$', buffer, &length);
 printf("Forked Permitted = %s¥n", buffer);

 PRIV_EMPTY(&priv_get);
 retval = getppriv(PRIV_EFFECTIVE, &priv_get);
 printf("retval = %d errno = %d¥n", retval, errno);
 priv_set_to_str(&priv_get, '$', buffer, &length);
 printf("Forked Effective = %s¥n", buffer);

新しいプロセス特権セット

fork(2) システムコールの後、printf 文によって次のように出力されます。

Forked Inheritable = proc_setid

Forked Saved = file_setpriv$proc_setid

Forked Permitted = file_setpriv$proc_setid

Forked Effective = none