服务器可以同时处理Shell命令吗?


11

我正在用PHP编写一个非常简单的基于浏览器的MP3播放器。该项目的一部分要求将每个MP3文件都转换为WAV文件。PHP中有一个名为的函数,可让您通过外壳执行命令。对于我的项目,只要有人将歌曲上传到他们的帐户,就会执行以下命令:shell_exec

shell_exec('ffmpeg -i inputSong.mp3 outputSong.wav')

假设有10个不同的人在同一时间完成一首歌曲的上传。Linux服务器是同时执行10个Shell命令还是一次仅执行一次?

如果服务器可以同时处理多个Shell命令,那么服务器将能够同时处理10首不同的歌曲,还是一次只能处理一首?


这个ubuntu有什么关系?它不属于serverfault或unix吗?
bitmask

5
接受用户输入的文件名时要非常小心。有人可能特意制作了模仿某些命令的文件名,并且您将执行该文件名,并且实际上您将被黑。
罗里

Answers:


13

如果您是通过PHP(或任何其他可以访问Shell命令的语言)通过PHP进行操作的,则将分别完成操作,这意味着如果10个用户同时使用PHP脚本,则它们将同时进行。每个PHP调用shell_exec将独立于其他进行。我自己有一个shell_exec脚本,可以向用户显示某些图像的某些信息,并且该脚本独立于其他PHP执行脚本通过来完成shell_exec

PHP可以同时处理的用户数是有限制的,但是如果您使用它,则取决于您的Web服务器,PHP配置文件和MySQL。我知道这个数字同时大于100。

当使用CPU密集型命令(例如转换视频)时,命令的有效使用将取决于您拥有多少RAM和拥有多少CPU能力。对于具有64 MB RAM和80486的用户,尝试转换两个视频和10首歌曲会很糟糕。这会使系统过载。对于拥有Core 2 Duo服务器和4 GB RAM的人,我认为转换几首歌曲将是小菜一碟。

因此,基本上,是的,Linux可以处理多个同时的shell命令,特别是来自PHP的shell命令,但是总体性能取决于服务器的资源(CPU,RAM,硬盘驱动器等)。


6

如果要支持大量用户,则必须研究处理转换过程的另一种方法。

例如,您可能会设置一个作业调度系统,以便将请求发布到系统中以转换文件并轮询系统的完成状态。调度系统将从队列中提取任务,并说一次执行最多四个文件转换。

这个问题可能很有趣:

/programming//q/265073/175849


另一个很好的答案,谢谢你steve-o
2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.