如何检测一个进程是否运行时间超过X秒,然后对其采取一些措施?

如何检测一个进程是否运行时间超过X秒,然后对其采取一些措施?

我在 debian 上。

我正在调用 ffmpeg 进程来生成 mp3。这是使用 shell_exec 从 php 脚本调用的。这在 99% 的情况下都可以正常工作。

有时,ffmpeg 进程不会退出,并且 ffmpeg 会运行几个小时。我正在慢慢调整参数,它发生的次数较少,但有时仍然会出现。

当我查看顶级进程时,有时会发现它正在消耗 cpu 和磁盘,但该进程尚未终止。

993 www-data 20 0 252012 38904 27384 R 99.7 1.9 390:09.84 ffmpeg

我通常会寻找该进程(并通过确保它执行的参数与我的 php 脚本匹配来确认它是正确的:

ps -eo args | grep ffmpeg

然后获取它的进程ID并杀死它,然后去寻找它正在处理的文件并将其也丢弃

-rw-r--r-- 1 www-data www-data 14G Feb 9 21:20 cfcd208495d565ef66e7dff9f98764da.mp3- 呃哦

我不确定我应该用谷歌搜索什么词。

我正在寻找监督进程或脚本的想法,我可以通过supervisord/cron作业运行它,该作业可以输出运行时间超过X秒的所有进程,并将其进程详细信息通过管道传输到可以将进程与参数相匹配的脚本中匹配一个模式(我想使用某种令人讨厌的正则表达式),终止进程并丢弃与其参数匹配的所有文件。

答案1

您可以使用暂停运行有时间限制的命令。

例如:

timeout 2 yes

将回显“y”两秒钟(否则它将永远持续下去)。

相关内容