시간 초과 명령이 종료되는 것을 방지하는 방법은 무엇입니까?

시간 초과 명령이 종료되는 것을 방지하는 방법은 무엇입니까?

내 프로세스가. 출력다음과 유사한 시간 초과 명령으로 시작되었습니다.

timeout 1 ./a.out - < file.txt


이는 서버에서 실행되며 서버에서 자동으로 호출되는 쉘 스크립트의 일부이므로 제어할 수 없습니다.

a.out이 완료되기 전에 종료되지 않도록 구현할 수 있는 가능성이나 솔루션이 있습니까?

  • SIG_IGN 매크로를 통해 신호 15(SIGTERM)를 매핑하여 1초가 아닌 약 5초 동안 실행되도록 했습니다.
  • SIGKILL을 보내면 timeout둘 다 종료됩니다.
  • SIGSTOP 및 SIGHUP 시간 초과 전송은 효과가 없는 것 같습니다.

이 문제에 대해 많이 검색했지만 모든 질문과 텍스트는 시간 초과 사용과 관련된 것 같습니다. 내가 또 무엇을 할 수 있나요? 다른 신호처럼 분기, 시간 초과 방지, 신호 차단, 인라인 어셈블리에서 작업 수행 등이 있습니까?

감사해요.

답변1

at관리자가 대기열을 잠그지 않으면 다음을 시도해 볼 수 있습니다.

#!/bin/sh
# timeout 1 ./a.out - < file.txt
#
if [ "$1" != '_at_' ]
then
    # Queue task
    file="$(mktemp '/var/tmp/XXXXXXXXXX.at.tmp')"
    cat >"$file"
    ( echo "'$0' _at_ "$file" "$@" ) | at -b now
    sleep 60
    exit 0
fi

# Reattach stdin
exec 0<"$2"
rm -f "$2"
shift 2

# Run the real code here
# ...

관련 정보