私のプロセス行く。出力次のようなタイムアウトコマンドで開始されました。
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
# ...