我最初的问题是在超时时杀死一个进程及其子进程。而且我发现 GNUtimeout
是一个不错的选择。
然而,在这个测试用例中,事情变得很奇怪:
假设我们有test1.sh
这样的:
#!/bin/sh
# test1.sh
output=`timeout 2 ./run.sh`
echo $output
像这样run.sh
:
#!/bin/sh
# run.sh
sleep 8s&
直觉上我们应该期望test1.sh
立即退出,因为init
将负责那个愚蠢的sleep
过程run.sh
然后退出。
然而:
sh-4.2$ time ./test1.sh
real 0m8.022s
user 0m0.013s
sys 0m0.003s
如果我创建这个test2.sh
:
#!/bin/sh
# test2.sh
timeout 2 ./run.sh
sh-4.2$ time ./test2.sh
real 0m0.014s
user 0m0.003s
sys 0m0.007s
所以,很明显我们在命令替换过程中遇到了一些错误,但是为什么呢?