我有一个 bash 脚本可以做很多事情,叫做script.sh
:
#!/bin/bash
#It
#Is
#Doing
#Things
有没有办法可以从脚本内部获取该脚本的进程 ID,然后在 5 分钟后将其杀死?
喜欢:
#!/bin/bash
#Get pid of script.sh here, start a 5 minute timer and kill the script after time runs out
#It
#Is
#Doing
#Things
答案1
timeout
GNU coreutils 中的实用程序会为您完成此操作:
timeout 5m bash script.sh
将在执行 5 分钟后终止脚本。
答案2
您可以通过 获得 PID PID=$$
。
您想要的可能可以通过命令最轻松地实现timeout
。
但您也可以运行后台进程:
(sleep $TIMEOUT && kill "$PID") &
答案3
如果您总是希望脚本在 5 分钟后超时,您可以简单地在后台进程中使用一个块,如下所示。如果您Ctrl+C
在运行时使用,后台进程也会终止:
#!/bin/bash
{
sleep 5m
kill $$
} &
while true
do
date
sleep 1
done
答案4
您可以使用检查条件:
#!/bin/bash
START=$(date +%s)
while [[ $(($(date +%s) - $START)) -lt 300 ]]
do
#do something here
done
echo QUIT
解释
date +%s
获取自纪元以来的秒数,我们将其保存到START
变量中,标记脚本的开始时间。[[ $(($(date +%s) - $START)) -lt 300 ]]
:我们(再次)得到当前时间date +%s
减去开始时间(保存在START
变量中)。- 如果结果小于
300
(5分钟),脚本继续运行, - 如果结果等于或大于
300
,意味着脚本自开始时间以来一直在运行5 minutes
,我们退出while
循环,脚本结束。