QNX-8—QNX常用命令—on
注:翻译 http://www.qnx.com/developers/docs/7.1/index.html#com.qnx.doc.neutrino.utilities/topic/o/on.html
一、语法:
on [-A ability-spec] [-ad | -ae] [-C cpunum] [-c] [-d] [-E] [-e key=value] [-h] [-L rlimit:cur[:max]] [-n|f nodename] [-p priority[policy]] [-R runmask] [-S path] [-s] [-T type] [-t tty] [-u uid[:gid[,gid,…] | -u user_name] [-W nsec[:msec]] [-w device] [-Xsched_command] [command [args]]
运行于:QNX Neutrino
二、选项:
-A ability-spec
配置一个能力。 ability-spec 参数是一个以逗号分隔的列表,其中包含以下内容,忽略字符串的大小写:
能力标识符,如<sys/procmgr.h>中定义但省略 前缀(例如,为PROCMGR_AID_SETUID 指定setuid),或者 able=string 或 able=numeric_ID 来指定动态能力。 如果您使用字符串指定动态能力,该实用程序将调用 procmgr_ability_lookup() 来确定该能力的 ID。 要成功实现此操作,该功能必须已创建,或者必须在启用 PROCMGR_AID_ABLE_CREATE 功能的情况下运行。
以下一项或多项操作:允许、拒绝、锁定(如果要阻止进程更改能力)、继承或不继承
如果该功能接受子范围并且您正在配置它,则可以省略这些操作。 在这种情况下,参数字符串必须以冒号和逗号分隔的子范围列表结尾,采用以下形式之一:
* 用连字符分隔的两个数字(例如 4-27)
* 一个数字后跟一个连字符(例如,4- 表示 4 及更大)
* 一个数字
root、nonroot 或 all 以指定适用的域
请注意,lock、inherit 和 noinherit 操作适用于整个能力; 您不能单独影响根域和非根域中的任何一个。
操作和域值映射到 procmgr_ability() 使用的标志; 有关所需和允许的标志组合的信息,请参阅此函数的能力参数以及允许的操作和域标志的列表。 标志设置的顺序并不重要,并且没有默认设置。 例如,如果您未指定继承或不继承,则该能力的继承设置不会发生变化。
您可以指定多个 -A 选项。 例如,要在以 root 身份运行时拒绝fork,但允许进程在非 root 身份时设置 _CS_HOSTNAME,请指定:
on -A root,deny,fork -A nonroot,allow,confset:2 ...
如果指定允许、拒绝、锁定、root、非 root 或全部不带能力名称,则该操作适用于其他 -A 选项中未特别提及的所有能力。 有关能力的更多信息,请参阅 procmgr_ability() 参。
如果您使用安全策略,请使用 -T 选项而不是 -A 来管理进程可以附加到的通道。 有关安全策略的信息,请参阅安全开发人员指南。
-ad | -ae
禁用或启用地址空间布局随机化 (ASLR)。 如果您不指定这两个选项中的任何一个,ASLR 将保持当前状态。
-C cpunum
(QNX Neutrino Core OS 6.3.2 或更高版本)将 CPU 亲和性设置为 cpunum, 其中第一个 CPU 为 0。您可以多次使用此选项。 有关详细信息,请参阅下面的“设置运行掩码”。
-c
(QNX Neutrino 7.1 或更高版本)创建关键进程(请参阅 posix_spawn() 条目中的 POSIX_SPAWN_CRITICAL 标志)。 如果关键进程死亡,系统就会崩溃。
-d
将命令与其父级分离(即切断父子关系)。 这对于远程创建的永远不会退出的进程很有用,因此 shell 不需要等待。 除非指定此选项,否则将创建将父级连接到子级的网络连接。
-E
清除所有环境变量,包括任何前面的 -e 选项。
-e key=value
为子进程定义环境变量 key 和 value 。 您可以指定多个 -e 选项。
-f nodename
使用远程节点的 / 作为网络根从远程节点生成(即在远程节点上搜索可执行文件)。 相反,-n 选项在本地节点上搜索可执行文件。有关更多详细信息,请参阅下面的“-f 与 -n 选项”。
-h
在 HELD 状态下启动命令。 此选项对于启动程序以进行调试非常有用。 您还可以在 HELD 状态下启动多个命令,然后向它们发送所有启动信号; 它们几乎都会在同一时间开始,因为它们的加载时间将被消除。
-L rlimit:cur[:max]
指定子进程的系统资源限制。 论据如下:
rlimit — 文本字符串(例如“freemem”)或标识所设置的 rlimit 的数值; 请参阅 <sys/resource.h> 中的 RLIMIT_*。 文本字符串中的大小写将被忽略。
cur — rlim_cur 字段(即软限制)。 对于 RLIM_INFINITY,它可以是数字或“inf”。
max(可选)— rlim_max 字段(即硬限制)。 它也可以是数字或“inf”。 如果您不指定此限制,它将保持其先前的值。
有关限制的更多信息,请参阅 QNX Neutrino C 库参考中的 setrlimit() 条目。
-n nodename
在远程节点名上执行命令(在本地节点上找到)。 相反,-f 选项在远程节点上搜索可执行文件。 有关更多详细信息,请参阅下面的“-f 与 -n 选项”。
-p priority[policy]
以指定的优先级执行命令,可以选择更改调度策略。
优先级的范围是 0 到 255。优先级 0 用于空闲线程。 默认情况下,优先级为 64 及更高的优先级是有特权的,因此只有启用了 PROCMGR_AID_PRIORITY 功能的进程(请参阅 C 库参考中的 procmgr_ability())才能使用它们。 非特权(和特权)进程可以使用从 1 到 63 的优先级。
您可以使用 procnto 的 -P 选项更改特权优先级的范围。
调度策略必须是以下之一:
f——先进先出
r——循环法
o — 其他(目前与循环赛相同)
如果您不指定命令,则更改将应用于父进程。
-R runmask
(QNX Neutrino Core OS 6.3.2 或更高版本)将 CPU 亲和性设置为 runmask。您可以多次使用此选项来指定长度超过 32 位的掩码。 有关详细信息,请参阅下面的“设置运行掩码”。
-S path
指定安全策略文件的路径。 默认路径和策略文件名为 /proc/boot/secpol.bin。 有关安全策略的更多信息,请参阅安全开发人员指南。
-s
在新的进程组中生成命令。
-T type
在安全策略文件中查找该类型的策略后,将命令作为给定类型运行; 确定路径管理器的附加规则以及进程可以附加到哪些通道。 这样,政策方面的进程就启动了。 类型在安全策略文件中定义。
procmgr 能力 PROCMGR_AID_SETTYPEID 控制进程在从自身创建新进程时指定类型 ID 的能力。 procmgr 功能 PROCMGR_AID_CHANNEL_CONNECT 控制附加/连接到通道。
有关安全策略的更多信息,请参阅安全开发人员指南。
-t tty
打开指定的终端名称作为命令的文件描述符 0、1 和 2。 该命令在新会话中运行,并以 tty 作为其控制终端。 如果 tty 不包含斜杠 (/),则 /dev/ 将添加到开头。
-t 选项在后台运行命令,并根据 -d 选项分离生成的子进程。
-u uid[:gid[,gid,…]] or -u user_name
以指定组中数字 uid 指定的用户身份或给定的 user_name 身份运行。
-W nsec[:msec]
等待以下 -w 选项中指定的设备的秒数。 默认是永远。
(QNX Neutrino 6.6 或更高版本)您可以选择指定轮询间隔(以毫秒为单位)。 默认值为 100 毫秒。
-w device
等待给定设备上的 stat() 成功,然后再继续。 如果设备不包含斜杠 (/),则 /dev/ 将添加到开头。
您可以在命令行上重复使用 -w 和 -W 选项。 它们按照给定的顺序进行处理,然后再进行任何其他选项。
如果指定 -w 选项,则成功时退出时状态为 0,如果发生超时则退出状态为非零值。
-Xsched_cmd
(QNX Neutrino Core OS 6.3.2 或更高版本)使用外部调度程序的指定命令启动。 可能的命令包括:
aps=partition_name — 将应用程序启动到具有给定名称的自适应分区中。有关详细信息,请参阅自适应分区用户指南。
命令[参数]
要执行的命令以及要传递给它的任何参数。
三、描述:
on 实用程序扩展了 shell (sh) 的进程创建能力。 使用此实用程序,您可以启动一个进程:
在远程节点上
在不同的控制终端上
处于 HELD 状态,用于调试或稍后同步启动
作为不同的用户
在特定的CPU上
具有特定能力
作为不同类型
具有各种资源限制
在 APS 分区中
如果您使用多个连续的 on 命令启动多个进程,请注意进程启动顺序很重要。 on 命令在进程启动后不会继续存在。
如果您尝试使用非 root 用户 ID 启动进程,则可能需要在命令行中使用额外的 procmgr 功能。 例如,如果您使用非 root 用户 ID 启动串行驱动程序,您可能需要添加添加物理内存和附加中断的功能。
如果未指定 -d 选项,则会创建网络连接作为远程子进程的本地代理。 当子进程终止时,父进程必须在创建的连接上执行 wait() 才能为子进程获取僵尸进程条目。 如果指定了 -d 选项,则该命令与其父命令分离。 父级无法为子级执行 wait() ,也无法通过信号控制子级。
默认情况下,该命令在当前会话中运行。 -t 选项启动一个新会话,这意味着如果当前会话领导者终止,该命令将不会收到 SIGHUP。
on -t 命令成为指定 tty 上的新会话领导者; 也就是说,它接收由该 tty 上的挂断生成的 SIGHUP。 最初在该 tty 上运行的任何进程都不会收到 SIGHUP,并且即使由 on 启动的进程终止,这种情况仍然存在。 因此,请仅指定当前未使用的 tty。
The -f vs -n option
-f 和 -n 选项看起来很相似,但它们有细微的不同。 为了说明这一点,让我们考虑两个节点:this_node 和 that_node。 在每个节点上,我们将创建 sleep 命令的副本,并附加节点名称;
在 this_node 节点上,如下所示:
cp /usr/bin/sleep /tmp/sleep_this_node
现在,让我们使用 -f 和 -n 选项运行 sleep_that_node 命令:
$ on -f /net/that_node /tmp/sleep_that_node 1
$ on -n /net/that_node /tmp/sleep_that_node 1
on: No such file or directory (/tmp/sleep_that_node)
第一个命令成功,因为我们使用 /net/that_node 作为网络根,而 sleep_that_node 就存在于此。 第二个命令失败,因为 sleep_that_node 在我们的本地节点上不存在。
$ on -f /net/that_node /tmp/sleep_this_node 1
on: No such file or directory (/tmp/sleep_this_node)
$ on -n /net/that_node /tmp/sleep_this_node 1
这次,第一个命令失败,因为 /net/that_node 上不存在 sleep_this_node。 第二个命令在本地节点上找到sleep_this_node,并在/net/that_node上执行它。
作为一个更有用的示例,让我们使用 pidin 来获取有关 that_node 上运行的进程的信息:
on -f /net/that_node pidin | less
如果您使用 -n 选项,如下所示:
on -n /net/that_node pidin | less
您可以获得有关在 this_node 上运行的进程的信息,但该命令是在 that_node 上执行的。
四、设置运行掩码
在多核系统上,您可以使用运行掩码来指定线程或进程可以在哪些处理器上运行。 默认值为全 1(即所有 CPU)。
在多核系统上,您可以使用运行掩码来指定线程或进程可以在哪些处理器上运行。 默认值为全 1(即所有 CPU)。
运行掩码仅在多处理器系统上有用。
可以使用on为新进程设置运行掩码和继承掩码; 要更改已运行线程的掩码,请使用 slay。这两个命令以相同的方式解释 -C 和 -R 选项。
您可以使用多个 -R 选项来指定长度超过 32 位的运行掩码。 第一个 -R 选项指定位 0 到 31,第二个指定位 32 到 63,依此类推。
如果同时使用 -C 和 -R 选项或它们的多个实例,则生成的掩码是所有 -C 和 -R 选项的按位 ORing。 例如,on -R 0x1 相当于 on -C0,on -R 0x1 -C3 相当于 on -C0 -C3。 on 命令将进程的运行掩码和继承掩码设置为相同的值。
有关运行掩码的更多信息,请参阅系统架构指南的多核处理一章和 QNX Neutrino 程序员指南的多核处理一章。
五、例子:
在控制台 2 上运行登录:
on -t con2 login
在名为 ruth 的节点上运行 pidin:
on -n ruth pidin
在名为 peter 的节点上作为孤儿运行 sort:
on -d -n peter sort file.dat
使用新会话在节点 george 上运行 pidin,其标准 I/O 连接到节点 ruth 上的控制台 1:
on -t /net/ruth/dev/con1 -n george pidin
六、退出状态:
on 实用程序以命令的退出状态退出。 如果指定 -w 选项,则成功时退出时状态为 0,如果发生超时则退出状态为非零值。
七、补充
1. on -R0x7 pipe & //启动时绑核
2. 使用on启动进程
# pidin | grep slogger2 8194 1 ifs/bin/slogger2 10r RECEIVE 1 # slay slogger2 //杀死进程 # pidin | grep slogger2 # on ifs/bin/slogger2 slogger2 appears to have been restarted, performing cleanup... # pidin | grep slogger2 //进程已重启 9084930 1 ifs/bin/slogger2 21r RECEIVE 1
3. 绑核
on -R0x7 ifs/bin/slogger2 //失败,绑不了核 on -R4 ifs/bin/slogger2 //失败,绑不了核 on -R 0x1 ifs/bin/slogger2 //失败,绑不了核 on -C4 ifs/bin/slogger2 //绑定成功
posted on 2024-02-28 17:34 Hello-World3 阅读(955) 评论(0) 编辑 收藏 举报