我正在尝试使用cpulimit编写一个脚本来控制VM n KVM的CPU使用率。使用cpulimit,我可以使用pid 2112来限制VM的CPU使用率:
./ cpulimit -p 2112 -l 50.
我想写一个可以打开界面的脚本
setcpu(vm_pid,limit)
可以多次调用,我不会覆盖现有的限制。我可以通过添加限制值作为运行cpulimit进程的运行时参数来覆盖现有限制。像subprocess.Popen(...,stdin = subprocess.PIPE)。我对如何获取正在运行的进程并提供运行时参数感到困惑。例如(没有脚本):
#。/ dotulimit -p 2112 -l 50
Process 2112 detected
现在它将为流程设置上限,现在我可以直接输入
40
80
覆盖现有限制。我想编写这种行为的脚本。如果你能提供关于如何编写这个脚本的指针或想法,那将是很棒的。非常感谢
答案 0 :(得分:1)
修改:如果您需要与现有的cpulimit
对话,您应该查看How to write data to existing process's STDIN from external process?
基本上,做
(while [ 1 ]; do sleep 1; done) | ./cpulimit -p 2112 -l 50.
当你启动cpulimit
时,因为它的输入需要是一个管道。
然后,从Python写入/proc/{pid_of_cpulimit}/fd/0
。
如果您使用
生成了一个流程process = subprocess.Popen(['./cpulimit', '-p', '2112', '-l', '50'], stdin=subprocess.PIPE)
只是做
process.communicate(input='40')
process.communicate(input='80')
答案 1 :(得分:0)
打开像agf节目这样的子流程,不要忘记指定管道stdin
:
import subprocess
p = subprocess.Popen("./cpulimit -p 2112 -l 50", stdin=subprocess.PIPE)
然后写信给p.stdin
:
p.stdin.write("40\n")
p.stdin.flush()