相关疑难解决方法(0)

在bash中超时命令没有不必要的延迟

这个答案了一定的时间后,命令行命令来自动杀死命令

提出了一个单行方法来从bash命令行超时长时间运行的命令:

( /path/to/slow command with options ) & sleep 5 ; kill $!
Run Code Online (Sandbox Code Playgroud)

但是,给定的"长时间运行"命令可能比超时更早完成.(我们称之为"通常长时间运行但有时快速"的命令,或者称为tlrbsf.)

所以这种漂亮的1-liner方法有几个问题.首先,sleep它不是有条件的,因此在序列完成所花费的时间上设置了不希望的下限.当tlrbsf命令在2秒内完成时,考虑30s或2m甚至5m的睡眠- 非常不受欢迎.其次,它kill是无条件的,所以这个序列将试图杀死一个非运行的进程并发出呜呜声.

所以...

有没有办法超时通常长时间运行但有时快("tlrbsf")命令

  • 有一个bash实现(另一个问题已经有Perl和C的答案)
  • 将在两个之前终止:tlrbsf程序终止或超时
  • 不会杀死不存在/未运行的进程(或者,可选:不会抱怨糟糕的杀戮)
  • 不必是1班轮
  • 可以在Cygwin或Linux下运行

...对于奖励积分,在前台运行tlrbsf命令,在后台运行任何"睡眠"或额外进程,这样tlrbsf命令的stdin/stdout/stderr 可以被重定向,就像它曾经被重定向一样直接跑吗?

如果是这样,请分享您的代码.如果没有,请解释原因.

我花了一段时间试图破解前面提到的例子,但我正在达到我的bash技能的极限.

bash command-line utilities timeout

267
推荐指数
11
解决办法
28万
查看次数

我应该以什么顺序发送信号以正常关闭进程?

评论这个答案的另一个问题,该评论说:

除非绝对必要,否则不要使用kill -9!SIGKILL无法被捕获,因此被杀死的程序无法运行任何关闭例程来例如擦除临时文件.首先尝试HUP(1),然后是INT(2),然后是QUIT(3)

我原则上同意SIGKILL,但其余的对我来说都是新闻.鉴于发送的默认信号killSIGTERM,我预计它是任意进程正常关闭的最常见信号.此外,我已经看到SIGHUP用于非终止原因,例如告诉守护程序"重新读取您的配置文件".而且在我看来SIGINT(你通常用Ctrl-C得到的中断,对吗?)并没有得到应有的广泛支持,或者相当不合适地终止.

鉴于这SIGKILL是最后的手段 - 您应该向任意进程发送哪些信号以及以何种顺序发送信号,以便尽可能优雅地关闭它?

如果可以,请用支持事实(超出个人偏好或意见)或参考资料证实您的答案.

注意:我对包括考虑bash/Cygwin的最佳实践特别感兴趣.

编辑:到目前为止,似乎没有人提到INT或QUIT,并且有限提及HUP.是否有任何理由将这些包括在有序的过程中?

bash signals job-control sigterm

80
推荐指数
4
解决办法
2万
查看次数

Bash Run命令一定时间?

我正在制作bash脚本供我使用.如何运行命令一段时间,比如20秒并终止命令?我尝试了很多来自互联网的解决方案,但没有任何效果,我也试过超时命令但没有成功.请给我一些解决方案.

提前致谢

更新

例如:我想在10秒后在脚本和终端中运行此命令

some command
Run Code Online (Sandbox Code Playgroud)

bash command timeout

26
推荐指数
3
解决办法
4万
查看次数

如何在Bash中超时一组命令

我正在摆弄Linux命令"timeout":它只是在给定秒后停止长时间运行的命令.但我想暂停一个命令,而不是一组命令.我可以以两种方式()和{;}对命令进行分组,但是以下都不起作用:

timeout 1 { sleep 2; echo something; }
timeout 1 ( sleep 2; echo something )
Run Code Online (Sandbox Code Playgroud)

我怎么能用分组来做到这一点?

linux bash command timeout

7
推荐指数
3
解决办法
3523
查看次数

是否可以从bash脚本中设置超时?

有时我的bash脚本挂起并保持没有明确的理由

所以他们实际上可以永远挂起(脚本进程会运行直到我杀了它)

是否有可能在bash脚本超时机制中组合以便在例如半小时后退出程序?

linux bash process settimeout

3
推荐指数
2
解决办法
1万
查看次数