タイムアウトコマンドが終了するのを防ぐ方法は?

タイムアウトコマンドが終了するのを防ぐ方法は?

私のプロセス行く。出力次のようなタイムアウトコマンドで開始されました。

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
# ...

関連情報