有没有办法使用超时来标记进程?如果进程在30分钟内没有优雅地终止,则该进程应该被标记。理想情况下,这种优雅的关闭应该在后台执行。
有一个timeout
命令,它允许您限制进程的执行时间,如果它没有及时响应初始信号(默认情况下为SIGTERM),则升级为SIGKILL。这不是您所要求的,但可能已经足够了。
要做你实际描述的事情(发送一个信号,短暂等待,然后发送一个kill ),你可能需要自己做一些簿记工作,正如这个问题所详述的。
一种选择是使用Upstart(或者我想象其他服务管理器),它提供了一个kill timeout n
命令,可以执行您想要的操作。
顺便说一句,许多系统将30分钟视为等待SIGTERM的时间太长。例如,Linux在关机时做了一些类似于你所描述的事情,但是在SIKKILLing之前,它只给了进程几秒钟的时间来清理和退出。对于其他用例,您当然可以像您描述的那样拥有长期终止(例如,使用Upstart),但是YMMV。
问题内容: 我正在python中使用subprocess模块运行一些shell脚本。如果shell脚本运行时间很长,我想杀死该子进程。我认为如果将其传递给我的陈述就足够了。 这是代码: 我已经用一些运行120秒的shell脚本测试了此调用。我期望子进程在30秒后被杀死,但是实际上该进程正在完成120秒脚本,然后引发了Timeout Exception。现在的问题是如何通过超时杀死子进程? 问题
问题内容: 我有一个bash脚本,该脚本启动一个子进程,该子进程有时会崩溃(实际上是挂起),并且没有明显的原因(封闭源代码,因此我无能为力)。结果,我希望能够在给定的时间内启动此过程,并在给定的时间之后未成功返回的情况下将其终止。 有没有 简单 而 强大的 方法可以使用bash来实现这一目标? PS:告诉我这个问题是否更适合serverfault或超级用户。 问题答案: (如下所示: BASH常见
问题内容: 我正在使用child_process.spawn()从在Ubuntu上运行的Node.JS应用程序启动脚本。据我所知,标准的分叉或生成的* nix进程通常不会在父进程死后死亡,但是当从Node.JS生成进程时,它们似乎在我的应用程序崩溃或被ctrl-c等终止时被杀死。 。 为什么会这样,并且有解决办法?我似乎在child_process API中找不到任何明显的选项。 我的应用程序启动
问题内容: 我想尽可能快地重复执行子过程。但是,有时该过程将花费很长时间,因此我想取消它。我使用signal.signal(…),如下所示: 但有时这段代码将尝试阻止下一轮执行。停止test / home / lu / workspace / 152 / treefit / test2超时/ bin / sh:/ home / lu / workspace / 153 / squib_driver
问题内容: 我想知道如何“杀死”已启动的过程。我知道Process API,但是不确定,是否可以使用它来杀死已经运行的进程,例如firefox.exe等。如果可以使用Process API,可以请您指向正确的方向?如果没有,还有哪些其他可用选项?谢谢。 问题答案: 如果你从Java应用程序中以从头开始处理(例如,通过调用或),那么你将对其具有有效的引用,并且可以在Process类中调用该方法以终止
问题内容: 我试图在javascript中生成一个进程,并在一段时间后将其杀死(出于测试目的)。 最后,该过程将是一个无限循环,我需要在指定的时间使用不同的参数重新启动,因此我认为生成该过程并杀死它是执行此操作的最佳方法。 我的测试代码是: 结果是: 但是我仍然需要发送ctrl + C来结束程序。我想念什么? 在Raspbian的节点0.10.17上,omxplayer是二进制文件(视频播放器)。