我有一个已配置为运行单元测试的已启动作业。有时,单元测试会挂起(通常是因为一些错误的代码)。我知道我的测试通常只需要几分钟即可运行。当他们挂起时,我通常不会注意到它大约一个小时,此时我必须弹出打开活动监视器并手动强行终止我的测试。我想让launchd为我做这件事。我怎样才能在一定时间后自动终止我的工作(如果它仍在运行)?
我一直在查看launchd 手册页,我注意到几个有希望的键(如TimeOut
和ExitTimeOut
),但描述中的措辞似乎不是我想要的。
我有一个已配置为运行单元测试的已启动作业。有时,单元测试会挂起(通常是因为一些错误的代码)。我知道我的测试通常只需要几分钟即可运行。当他们挂起时,我通常不会注意到它大约一个小时,此时我必须弹出打开活动监视器并手动强行终止我的测试。我想让launchd为我做这件事。我怎样才能在一定时间后自动终止我的工作(如果它仍在运行)?
我一直在查看launchd 手册页,我注意到几个有希望的键(如TimeOut
和ExitTimeOut
),但描述中的措辞似乎不是我想要的。
launchd 无法知道或关心您的进程所做的任何事情。只要它持续几秒钟不退出,它就很高兴。
在玩了TimeOut
and之后ExitTimeOut
,我得出的结论是,在一定的时间间隔后,launchd 似乎没有办法杀死进程。
我最终将所需的代码添加到我的程序本身。(我的程序不仅仅是单元测试)
(注意:这些是半原始的想法,而不是完美的解决方案。)
一种可能性是使用 launchd 的看门狗功能。如果您可以自定义单元测试以在文件启动时触摸文件,则可以在检测到该文件时启动单独的 launchd 任务。如果单元测试脚本在指定的时间间隔内没有删除文件,那么它应该被杀死。为此,您可以让看门狗任务启动一个脚本,该脚本获取单元测试的 PID,休眠所需的时间间隔,然后如果该进程仍在运行,则终止单元测试。YMMV。