다음과 같은 많은 작업을 수행하는 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
변수에 저장됨).- 결과가 5분 미만이면
300
스크립트가 계속 실행됩니다. - 결과가 같거나 크면
300
시작 시간 이후 스크립트가 실행 중임을 의미하며 루프를5 minutes
종료while
하고 스크립트가 종료됩니다.