Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在bash脚本中,睡眠似乎首先运行_Bash_Unix_Sleep - Fatal编程技术网

在bash脚本中,睡眠似乎首先运行

在bash脚本中,睡眠似乎首先运行,bash,unix,sleep,Bash,Unix,Sleep,如果脚本超过特定的持续时间(10分钟),我需要终止脚本 当我在测试环境中测试它时,它似乎工作得很好examplescript.sh首先运行,如果运行时间超过10分钟,则将终止。然而,当我在我们的生产环境中尝试时,似乎睡眠是第一位的。在运行examplescript.sh之前,它会等待600秒。脚本中有什么错误吗?代码中有一点需要纠正 pgrep将对进程名而不是PID进行正则表达式搜索。您可以使用kill-0pid检查具有pid的进程是否正在运行 [(test)是一个命令[1],应该被视为一个。这

如果脚本超过特定的持续时间(10分钟),我需要终止脚本


当我在测试环境中测试它时,它似乎工作得很好
examplescript.sh
首先运行,如果运行时间超过10分钟,则将终止。然而,当我在我们的生产环境中尝试时,似乎睡眠是第一位的。在运行
examplescript.sh
之前,它会等待600秒。脚本中有什么错误吗?

代码中有一点需要纠正

pgrep
将对进程名而不是PID进行正则表达式搜索。您可以使用
kill-0pid
检查具有
pid
的进程是否正在运行

[
test
)是一个命令[1],应该被视为一个。这意味着每个参数都应该用空格分隔。使用
[
时,最后一个参数也应该是
]

[ arg1 arg2 ]
在您的示例中,您不需要
[
,因为如果进程仍在运行,
kill-0
将真正退出:

if kill -0 pid; then
总而言之:

examplescript.sh &
pid=$!
sleep 600
if kill -0 "$pid" 2> /dev/null; then
    kill "$pid"
fi
如果进程不再运行,
kill-0
将向stderr写入一个错误。因此我们将其重定向到
/dev/null

[1] 这几天通常是一个构建


另一件需要注意的事情是,您的脚本将运行600秒,即使
examplescript.sh
只需要几秒钟就可以运行。

您的生产机器速度是否明显更快?我没有在我的机器上真正运行此脚本的示例,但我认为如果您使用上面提到的代码,您的问题可能会得到解决

examplescript.sh &
pid=$!
sleep 600 
if ['pgrep $pid']
   then 
     kill $pid
fi
把它放在一个名为,
monitor.sh
的文件中,并在后台运行该文件

monitor.sh &

希望这能有所帮助。

您发布的脚本有问题,但它与
睡眠
examplescript.sh启动之前运行无关(这应该是不可能的)。请参阅shellcheck.net。另一件需要注意的事情是,您的脚本将运行600秒,即使examplescript.sh只需几秒钟即可运行。-如果不使用睡眠,我如何才能在超过10分钟的情况下运行kill?@noobLadyTea您的脚本与睡眠600秒的脚本一样。
monitor.sh &