Вы должны быть в состоянии использовать функцию будильника ().Хотя он находится в unistd.h, он является функцией POSIX.1-2001 и должен быть доступен в cygwin.Если SIGALRM не обрабатывается, он убивает процесс.
Попробуйте:
#include <stdio.h>
#include <unistd.h>
int main() {
alarm(5); /* raise alarm after 5 seconds */
while(1) {
printf("Running forever\n");
}
return 0; /* never reached */
}
update
Как указывает Джонатан, тревога (2) срабатывает только в считанные секунды, поэтому вы можетевместо этого используйте setitimer (также POSIX-совместимый)
#include <stdio.h>
#include <sys/time.h>
int main() {
/* --CUT HERE-- */
struct itimerval timer;
timer.it_value.tv_sec = 0;
timer.it_value.tv_usec = 5000; /* 5 milliseconds */
timer.it_interval.tv_sec = 0;
timer.it_interval.tv_usec = 0;
setitimer(ITIMER_REAL, &timer, NULL);
/* --END CUT-- */
while(1) {
printf("Running forever\n");
}
return 0; /* never reached */
}
, если вышеперечисленное работает в вашей системе, скопируйте код из --CUT HERE-- в --END CUT-- и вставьте его в свой основной;
обновление 2
для ограничения памяти, попробуйте использовать setrlimit:
см. Установить размер стека с помощью setrlimit () и вызвать переполнение стека / segfault
для примера