我的过程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
# ...