我有一个脚本,计划在客户的生产服务器上定期运行,以便从他们的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
发布于 2009-11-18 22:30:00
cpulimit做什么?这不是手头的任何Fedora安装中的命令...
当它积累了太多的CPU时间时,它看起来会暂停进程;使用nice如何呢?
发布于 2009-11-19 23:59:56
cpulimit通过重复发送进程SIGSTOP和SIGCONT信号来限制CPU使用。通过控制这些信号之间的时序,可以限制CPU使用率。
当您手动运行cpulimit时,您可能已经在后台运行PHP脚本。脚本实际上已经停止了,但是因为它是在后台运行的,所以您的shell会认为您并不关心它,并且不会报告它。
当您将对cpulimit的调用合并到脚本本身中时,脚本将在前台运行,并且您的shell会报告它。
您将看到,在这两种情况下,cpulimit实际上都在工作,唯一的区别是您的shell处理这种情况的方式不同。
https://stackoverflow.com/questions/1756346
复制相似问题