我有一个脚本,该脚本计划在客户生产服务器上定期运行,以从其FTP服务器导入一些数据。这需要按计划运行,即使在客户工作的那一天也是如此。有时,脚本会占用大量CPU,这会降低客户的生产环境。我以为我可以使用cpulimit来控制进程,但我似乎无法让它在PHP中正常运行。我有一个沙盒脚本,包含以下几行:
$pid = getmypid();
exec("/usr/bin/cpulimit -p $pid -l 20 -z < /dev/null 2>&1 > /dev/null &");
当我从命令行获取pid并运行此命令时,它运行良好。但是,当我运行脚本时,我得到[1]+ Stopped php web/sandbox/sandbox.php
。我已经从PHP脚本中运行了很多次这样的后台任务。我能做错什么?
提前致谢,
~JamesArmes
答案 0 :(得分:3)
cpulimit通过重复发送进程SIGSTOP和SIGCONT信号来限制CPU使用率。通过控制这些信号之间的时序,可以限制CPU使用率。
当您手动运行cpulimit时,您可能已经在后台运行PHP脚本。该脚本实际上已停止,但由于它在后台运行,因此您的shell认为您不关心并且不报告它。
当你在脚本本身中调用cpulimit时,脚本在前台运行,你的shell会报告它。
你会发现在两种情况下cpulimit实际上都在做它的工作,唯一的区别是你的shell处理这种情况的方式。
答案 1 :(得分:0)
cpulimit做什么?它不是任何Fedora安装中的命令......
当它累积太多的CPU时间时,它似乎暂停了进程;如何使用nice呢?