防止"终止"杀死子进程时的消息

时间:2015-08-27 13:44:40

标签: bash timeout

我正在寻找像Linux" timeout"命令,允许timouet值小于1秒。我正在使用解决方案here,但我遇到了一个问题。

问题在于,有时会打印此消息,而我正试图找出原因。

./tools/utimeout.sh: line 17: 12369 Terminated              $(./tools/usleep $TIMEOUT ; kill $PROC &> /dev/null)

我尝试修改解决方案,以便在脚本退出之前杀死子进程,但这没有帮助。

#!/bin/bash

TIMEOUT=400000

#execute command in background
"$@" &

#get process ID
PROC=$! 

#sleep for 10 milliseconds then kill command
(./tools/usleep $TIMEOUT ; kill $PROC &> /dev/null) & 

CPROC=$!
wait $PROC &> /dev/null
kill $CPROC &> /dev/null

if [ $? -eq 1 ]; then
    # echo "Process timed out."
    exit 1
else
    # echo "Process completed successfully."
    exit 0
fi

由于我想从这个脚本捕获stderr,作为解决方法,我只是用sed从错误日志中删除消息。由于这是一个黑客,我希望找到一个更好的解决方案。

1 个答案:

答案 0 :(得分:2)

要避免此消息,您可以取消该过程

(./tools/usleep $TIMEOUT ; kill $PROC &> /dev/null) &
disown %

然后你不能等待它,或者你可以把它放在子shell中:

( (./tools/usleep $TIMEOUT ; kill $PROC &> /dev/null) & )

但当然你不能把它当作$!不对。

我的fedora 21超时需要浮点持续时间:

$ time timeout .1 sleep 1
real    0m0.103s
user    0m0.002s
sys     0m0.002s