我一切顺利,我的节目在大约N秒内结束:
./maybe_deadlock
但有时会发生随机死锁,程序会永远挂起。
要调试这个,我想按照以下几行运行程序:How to debug a rare deadlock?
while true; do
date
gdb -ex 'set confirm on' -ex run -ex quit --args ./maybe_crash.out;
done
但是为了让事情变得更方便,我想在N秒过后收到通知,所以我不必继续检查终端以查看stdout是否卡住了。
换句话说,如果N秒过去且程序没有完成,我想从https://unix.stackexchange.com/questions/144924/how-to-create-a-message-box-from-the-command-line运行一个任意命令。
我知道来自How to kill a child process after a given timeout in Bash?的timeout
命令,但我不想杀死我的进程,因为我想在之后在GDB上检查它。
我想我可以提出一个丑陋的解决方案,将进程置于后台,休眠,等待并触及一个哨兵文件,但让我们看看是否有更优雅的方法。
该程序可以测试解决方案:
#define _XOPEN_SOURCE 700
#include <stdlib.h>
#include <time.h>
#include <unistd.h>
int main() {
if (time(NULL) % 2) {
sleep(3);
} else {
while (1) {
sleep(0x7FFFFFFF);
}
}
return EXIT_SUCCESS;
}
答案 0 :(得分:2)