ra_exec 子例程
用途
执行文件并将其附加到给定资源。
库
标准 C 库 (libc.a)
语法
#include <sys/rset.h>
int ra_execl(rstype, rsid, flags, path, argument0 [,argument1,...], 0)
rstype_t rstype;
rsid_t rsid;
unsigned int flags;
const char * path, argument0, argument1,...;
int ra_execle(rstype, rsid, flags, path, argument0[,argument1,...], 0, envptr)
rstype_t rstype;
rsid_t rsid;
unsigned int flags;
const char * path, argument0, argument1,...;
char * const envptr[];
int ra_execlp(rstype, rsid, flags, File, argument0[,argument1,...], 0)
rstype_t rstype;
rsid_t rsid;
unsigned int flags;
const char * File, argument0, argument1,...;
int ra_execv (rstype, rsid, flags, path, argumentv)
rstype_t rstype;
rsid_t rsid;
unsigned int flags;
const char * path;
char * const argumentv[];
int ra_execve (rstype, rsid, flags, path, argumentv, envptr)
rstype_t rstype;
rsid_t rsid;
unsigned int flags;
const char * path;
char * const argumentv[], envptr[];
int ra_execvp (rstype, rsid, flags, File, argumentv)
rstype_t rstype;
rsid_t rsid;
unsigned int flags;
const char * File;
char * const argumentv[];
int ra_exect(rstype, rsid, flags, path, argumentv, envptr)
rstype_t rstype;
rsid_t rsid;
unsigned int flags;
char * path, argumentv, envptr[];描述
所有形式的 执行 (ra_exec) 子例程,在调用过程中执行一个新程序,并将该过程连接到由 雷斯特佩 和 Rsid 参数指定的资源。 执行 (ra_exec) 子例程可以将新进程连接至资源集 (rstype R_RSET) 或 sradid (rstype R_SRADID)。
要成功将进程连接到资源集,必须满足以下条件:
- 该资源集必须包含在系统中可用的处理器。
- 该进程必须具有 root 用户权限或具有 CAP_NUMA_ATTACH 能力。
- 调用线程不能具有到处理器的 bindprocessor 绑定。
- 资源集必须包含在 (是以下项的子集) 中 进程的分区资源集。
注: 当使用 执行 子例程时,新的进程映像将继承其进程的资源集附件。
动态处理器取消分配和 DLPAR 可能会使正在指定的处理器连接失效。 程序必须成为 DLPAR Aware 才能解决此问题。
可以设置 标志 参数以指示用于使用 雷塞 参数中指定的资源集中包含的资源的策略。 唯一受支持的调度策略是 R_ATTACH_STRSET ,仅当系统的处理器以 同时多线程 方式运行时,此策略才有用。 POWER5 支持 同时多线程之类的处理器,其中每个物理处理器都有两个执行引擎,称为 硬件线程。 每个硬件线程基本上等同于单个处理器,并且每个线程在资源集中被标识为单独的处理器。 R_ATTACH_STRSET 标志指示该进程将使用单线程策略进行调度; 即,应该仅在每个物理处理器的一个硬件线程上调度该进程。 如果指定了此标志,那么资源集中指示的所有可用处理器都必须是独占使用的 (该处理器必须属于某个独占使用处理器资源集)。 新资源集 (称为 ST 资源集) 是根据指定的资源集构造的,并根据以下规则连接到流程:
- 将忽略所有脱机处理器。
- 如果物理处理器的所有硬件线程 (处理器) (以 同时多线程 方式运行时,每个物理处理器将有多个活动硬件线程) 未包括在指定的资源集中,那么在构造 ST 资源集时,将忽略该处理器的其他处理器。
- 每个物理处理器只有一个处理器 (硬件线程) 资源包含在 ST 资源集中。
参数
执行 (ra_exec) 子例程具有与 执行 子例程相同的参数,但添加了下列新参数:
| 项 | 描述 |
|---|---|
| 雷斯特佩 | 指定新进程映像将附加到的资源的类型。 此参数必须是下列其中一项:
|
| Rsid | 标识新进程映像将连接到的资源:
|
| 标志 | 指定要用于该进程的策略。 对于 rstype R_RSET , R_ATTACH_STRSET 标志指示要使用单线程策略 (每个物理处理器仅在一个硬件线程上) 来调度进程。 所有其他标志位都是保留的,必须指定为 0。 |
返回值
执行 (ra_exec) 子例程的返回值和 执行 子例程的返回值相同。
错误代码
执行 (ra_exec) 子例程的错误代码与 执行 子例程的错误代码相同,但增加了下列错误代码:
| 项 | 描述 |
|---|---|
| EINVAL | 发生了下列其中一个错误:
|
| ENODEV | 由 雷塞 参数指定的资源集不包含任何可用的处理器,或者指定了 R_ATTACH_STRSET 标志 参数,并且构造的 ST 资源集没有任何可用的处理器。 |
| ENODEV | 指定了无效的 rsid SRADID。 |
| EFAULT | 地址无效。 |
| EPERM | 发生了下列其中一个错误:
|
| ENOTSUP | 已尝试连接 SRADID ,并且已禁用 ENHANCED_AFFINITY。 |