鉴于运行lubuntu的单处理器虚拟机,我想知道是否可以绑定处理器,以便其他程序无法运行任何指令。
例如,如果程序A和程序B几乎同时运行,是否可以设置程序A的优先级(在其源代码中使用setpriority()函数)在程序B之前运行然后绑定处理器使程序B无法执行?
答案 0 :(得分:0)
使用正确的权限,可以调用'sched_setscheduler'来为进程提供实时优先级。普通过程或具有较低优先级的其他实时过程不会中断这样的过程。这样的实时进程只有在通过执行一些调用(如睡眠或等待IO)放弃时才会丢失CPU。一旦它们能够再次工作,它们也将被给予CPU,并且任何具有更高优先级的实时进程都不需要CPU。
答案 1 :(得分:0)
您可以使用kill
调用SIGSTOP
并使用pid值-1
来停止除init和调用进程之外的每个进程(即,有权限)停止,如果您是root用户,则应该停止init
以外的每个进程以及调用kill
的进程。
你想要使用脚本语言而不是kill二进制文件,因为kill二进制文件在发送信号后会退出而不会给你运行了kill二进制文件的shell已经停止,这会阻止你启动你的应用。
,例如,在红宝石中,你可以做到,
#Broadcast the STOP signal
Process.kill(:STOP, -1)
#Run your process with the playground having been cleared
system('the_high_priority_app')
#Resume the stopped processes
Process.kill(:CONT, -1)
上面的内容有点像黑客,如果你有许多进程通过在它们之间发送SIGSTOP和SIGCONT信号来执行某些IPC,那么就不太安全了 - 你可以将SIGCONT发送给已被停止的进程其他过程。您可以获得在广播SIGSTOP信号时停止的进程列表,并在广播SIGCONT信号时跳过这些进程列表,但理论上这组sigstop进程可能会在您扫描它们和广播SIGSTOP信号之间发生变化。