相关疑难解决方法(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万
查看次数

如何在Bash中给定超时后杀死子进程?

我有一个bash脚本启动一个子进程,它不时崩溃(实际上,挂起)并没有明显的原因(闭源,所以我无能为力).因此,我希望能够在给定的时间内启动此过程,如果在给定的时间后没有成功返回,则将其终止.

有没有一种简单强大的方法来实现使用bash?

PS:告诉我这个问题是否更适合serverfault或超级用户.

unix linux bash

161
推荐指数
3
解决办法
9万
查看次数

在给定时间之后杀死进程?

我有一个脚本尝试使用另一个程序建立数据库连接,程序的超时(2.5分钟)是长的.我想将此功能添加到脚本中.

如果连接需要5秒以上的时间,请终止进程
Else kill sleep/kill进程.

我遇到的问题是bash如何在进程被杀死时报告,这是因为进程只在后台处于同一个shell中.有没有更好的方法来执行此操作或如何使shell为kill命令静音?

DB_CONNECTION_PROGRAM > $CONNECTFILE &
pid=$! 
(sleep 5; kill $pid) &
sleep_pid=$!
wait $pid

# If the DB failed to connect after 5 seconds and was killed
status=$? #Kill returns 128+n (fatal error)
if [ $status -gt 128 ]; then
    no_connection="ERROR: Timeout while trying to connect to $dbserver"
else # If it connected kill the sleep and any errors collect
    kill $sleep_pid
    no_connection=`sed -n '/^ERROR:/,$p' $CONNECTFILE`
fi
Run Code Online (Sandbox Code Playgroud)

bash kill

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

如果任何命令运行时间过长,则中止脚本

我有一个名为的应用程序A,它接收输入n并在返回答案之前运行一段时间。

我想使用以下简单的 bash 脚本A来增加大小:n

#!/bin/sh

time ./A 10
time ./A 20
time ./A 30
.
.
.
Run Code Online (Sandbox Code Playgroud)

然而我还需要一些非常重要的东西。如果一个time调用执行时间太长,因为输入很大,那么我需要整个 bash 脚本停止运行。

有一个简单的方法可以做到这一点吗?

bash

5
推荐指数
1
解决办法
4789
查看次数

在Bash中将进程限制为0.5秒

如何在Bash中将进程限制为少于1秒的CPU时间?我使用的是版本4.1.5(1),如果我输入ulimit -t 0.5 command,我得到:

-bash: ulimit: 0.5: invalid number
Run Code Online (Sandbox Code Playgroud)

我使用的ulimit -t 1 command是一个不完美的替代品,但由于技术原因我不需要打扰你,我非常希望command在它有一个半秒或者可能少一点的CPU后停止.

特定于Linux的答案会很好.

unix linux bash shell

1
推荐指数
1
解决办法
1252
查看次数

标签 统计

bash ×5

linux ×2

unix ×2

command-line ×1

kill ×1

shell ×1

timeout ×1

utilities ×1