如何防止超时命令被kill?

如何防止超时命令被kill?

我的过程a. 输出由类似于以下的超时命令启动:

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


它在服务器上运行,我无法控制它,因为它是服务器自动调用的 shell 脚本的一部分。

我是否可以实施任何可能性或解决方案,以便 a.out 在完成之前不会被杀死?

  • 我已经通过 SIG_IGN 宏映射了信号 15 (SIGTERM),因此它运行大约 5 秒而不是 1 秒。
  • 如果我发送 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
# ...

相关内容