gpt4 book ai didi

c++ - 程序被杀死时调用函数

转载 作者:行者123 更新时间:2023-11-28 04:35:04 24 4
gpt4 key购买 nike

我在 HPC 上运行我的一些 C++ 程序,使用 SLURM 进行调度。有时我的程序被杀死,要么是因为它们使用了太多资源,要么是因为它们运行时间太长。通常,如果我的程序运行完毕,或遇到内部错误,我会收到一条消息告诉我这一事实,我可以采取适当的措施。
但是,如果我的程序被队列管理器杀死,我就不会收到任何消息(是的,我指定我想在作业文件中获取这些消息,但不知何故无法正常工作)。因此我想知道是否有可能在遇到终止信号时调用程序内的函数,或者以其他方式告诉我主程序何时被终止?

最佳答案

也许你可以换个角度看。在程序结束前稍微停止一下,尽你的责任产生一个干净的导出。使用 slurm,您可以使用:

#SBATCH --signal=B:USR1@120

在作业限制前 120 秒向您的 bash 脚本发送信号。只需捕获此信号并产生一个干净的导出。

我用过,效果很好。

#!/bin/bash -l

# job name
#SBATCH --job-name=example

# replace this by your account
#SBATCH --account=...

# one core only
#SBATCH --ntasks=1

# we give this job 4 minutes
#SBATCH --time=0-00:04:00

# asks SLURM to send the USR1 signal 120 seconds before end of the time limit
#SBATCH --signal=B:USR1@120

# define the handler function
# note that this is not executed here, but rather
# when the associated signal is sent
your_cleanup_function()
{
echo "function your_cleanup_function called at $(date)"
# do whatever cleanup you want here
}

# call your_cleanup_function once we receive USR1 signal
trap 'your_cleanup_function' USR1

echo "starting calculation at $(date)"

# the calculation "computes" (in this case sleeps) for 1000 seconds
# but we asked slurm only for 240 seconds so it will not finish
# the "&" after the compute step and "wait" are important
sleep 1000 &
wait

这些行是从 here 中提取的

关于c++ - 程序被杀死时调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51713689/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com