我需要问这个问题,只是为了复核答案。
命令的顺序重要吗?例如:
这个命令是
taskset 0x2 time echo "foo"相等于
time taskset 0x2 echo "foo"我需要知道,任务集后面的所有命令是否都具有相同的CPU关联,或者仅仅是紧随其后的命令。
发布于 2015-06-11 10:01:39
我需要知道
taskset后面的所有命令是否都具有相同的CPU关联,或者仅仅是后面的命令。
下面是一个小实验:
开始两个BG任务
$ > taskset 0x2 sleep 50 & sleep 60 &拿到他们的PID
$ > ps
PID TTY TIME CMD
18562 pts/81 00:00:00 bash
20750 pts/81 00:00:00 sleep
20751 pts/81 00:00:00 sleep
20752 pts/81 00:00:00 ps获取已知PID的CPU关联:
$ > taskset -p 20750
pid 20750's current affinity mask: 2
$ > taskset -p 20751
pid 20751's current affinity mask: 3f因此,似乎只为第一个进程设置了CPU关联。
Update (试图解释以下行为):
/usr/bin/time taskset 0x2 sleep 100000=>只有sleep才能获得亲和掩码2 (有点期待!)taskset 0x2 /usr/bin/time sleep 100000 => time和sleep都得到了亲和掩码2 (需要澄清!)在第二种情况下,让我们调用ps -f来获取每个进程的PPID (父PID):
$> taskset 0x2 /usr/bin/time sleep 60 &
[1] 5942
$> ps -f
UID PID PPID C STIME TTY TIME CMD
user 5942 9698 0 18:19 pts/261 00:00:00 /usr/bin/time sleep 60
user 5943 5942 0 18:19 pts/261 00:00:00 sleep 60
user 5944 9698 0 18:19 pts/261 00:00:00 ps -f
user 9509 9508 0 16:19 pts/261 00:00:00 -bash
user 9698 9509 0 16:20 pts/261 00:00:00 bash
$> taskset -p 5942
pid 5942's current affinity mask: 2
$> taskset -p 5943
pid 5943's current affinity mask: 2可见,sleep的PPID (5942)与/usr/bin/time的PID (5942)相对应,IOW sleep是/usr/bin/time的子进程,因为任何子进程都继承了父进程的配置,sleep与/usr/bin/time具有相同的CPU亲和力。
发布于 2015-06-16 18:51:02
你好像在问两个不同的问题--“它们是等价的吗?”和“CPU亲缘关系继承了吗?”。
首先,您列出的两个命令并不等价。第一项:
taskset 0x2 time echo "foo"假设PATH和与我目前所使用的主机类似的设置,相当于:
/bin/taskset 0x2 /usr/bin/time /bin/echo "foo"生成这样的过程树:
/bin/taskset
|
\- /usr/bin/time
|
\- /bin/echo第二部分:
time taskset 0x2 echo "foo"它相当于由/bin/taskset 0x2 /bin/echo "foo"内置time包装的bash,生成这个过程树:
/bin/taskset
|
\- /bin/echo在这种情况下,只有两个外部进程-- time部件由bash内部处理,而不是调用/usr/bin/time。
为了回答第二个问题,CPU亲和力是在Linux中继承的,所以您的第一个示例将/usr/bin/time和/bin/echo绑定到指定的CPU集。在第二个示例中,由于time是shell内置的,因此它将受到bash本身上的任何CPU关联设置的影响,而不是受当前命令行中的taskset的影响。
https://stackoverflow.com/questions/30776315
复制相似问题