小编akr*_*kry的帖子

如何通过调度程序将每个进程固定到特定核心(Linux)

我现在正在研究Linux的调度程序.关于CPU核心亲和力,我想知道以下内容:

1)每个进程(线程)如何固定到核心?

有一个系统调用sched_setaffinity来更改执行进程的核心关联.但在内部,当生成进程(或线程)时,默认的Linux调度程序如何将进程(线程)分配给特定的核心?我修改了sched_setaffinity系统调用以转储有关正在从一个核心移动到另一个核心的任务的信息.

printk(KERN_INFO "%d %d %ld %lu %s\n", current->pid, current->tgid,
                                       current->state, current->cpus_allowed,
                                       current->comm);
Run Code Online (Sandbox Code Playgroud)

似乎没有上述信息的转储/var/log/messages.因此默认的调度程序以不同的方式将每个进程固定,但我无法弄清楚如何.

2)是否可以通过PID或其他信息获取核心ID?

这是我想在Linux内核中实现的.在task_struct,有一个成员叫cpus_allowed.但这是设置亲和力的掩码,而不是核心ID.我想检索一个数据,标识运行指定进程的核心.

谢谢,

linux kernel scheduler

14
推荐指数
2
解决办法
5480
查看次数

"描述符"和"签名"之间有什么区别?

我现在使用ASM(Java字节码检测库).要检索给定方法的签名,有一个名为"desc"的字段.我想这是"描述符"的缩写,但为什么不将它命名为"签名"?"描述符"和"签名"之间有什么区别吗?

java terminology descriptor signature

12
推荐指数
3
解决办法
6146
查看次数

同时执行多个shell脚本

我想做以下事情:

  • 同时执行多个shell脚本(此处为2个脚本).

  • 等到两个脚本完成

  • 转储每个脚本的返回值

但是,main.sh不能按预期工作.


main.sh

#!/bin/bash

ret1=`./a.sh` &
ret2=`./b.sh`

if [ "${ret1}"="" -a "${ret2}"="" ]; then
   sleep 1
else
   echo ${ret1},${ret2}
end
Run Code Online (Sandbox Code Playgroud)

#!/bin/bash
sleep 10
echo 1
Run Code Online (Sandbox Code Playgroud)

b.sh

#!/bin/bash
sleep 5
echo 2
Run Code Online (Sandbox Code Playgroud)

parallel-processing bash shell

9
推荐指数
3
解决办法
2万
查看次数