Lubuntu 上的程序优先级

Program Priority on Lubuntu

给定一个单处理器虚拟机 运行ning lubuntu,我想知道是否可以占用处理器以便其他程序无法 运行 任何指令。
例如,如果程序 A 和程序 B 几乎同时为 运行,是否可以将程序 A 的优先级(在其源代码中使用 setpriority() 函数)设置为 运行在程序 B 之前,然后占用处理器,使程序 B 无法执行?

有了正确的权限,就可以调用 'sched_setscheduler' 来赋予进程实时优先权。这样的进程不会被普通进程或其他低优先级的实时进程中断。这样的实时进程只会在它们通过睡眠或等待 IO 等调用放弃时才会丢失 CPU。一旦他们能够再次工作并且任何具有更高优先级的实时进程都不需要 CPU,他们也将获得 CPU。

您可以使用 SIGSTOP 和 pid 值 -1 调用 kill 来停止您可以(即有权)停止的每个进程,除了 init 和调用进程,如果你是 root,应该停止除 init 和调用 kill.

之外的所有进程

您希望使用脚本语言而不是 kill 二进制文件,因为 kill 二进制文件会在发送信号后退出并且不会给 shell 您 运行 来自的 kill 二进制文件已停止,阻止您启动您的应用程序。

例如,在 ruby 中,您可以这样做,

#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,则不是很安全j -- 您可能正在将 SIGCONT 发送到已经被其他进程停止。您可以获得在广播 SIGSTOP 信号时停止的进程列表,并在广播 SIGCONT 信号时跳过这些进程,但是理论上,在扫描它们和广播 SIGSTOP 信号之间,sigstop 进程集可能会发生变化。