Я лично ненавижу подобные вопросы, но я застрял. У меня есть программа, которую я пытаюсь запустить на Ubuntu 12.4(kernal: Linux 3.2.0-39-generic-pae # 62-Ubuntu SMP i686 i686 i386 GNU/Linux; компилятор: gcc (Ubuntu/Linaro 4.6 .3-1ubuntu5) 4.6.3):Аварийный сигнал на Ubuntu 12.4
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
/*
* sleep1.c
* purpose show how sleep works
* usage sleep1
* info sets handler, sets alarm, pauses, then returns
*/
int main()
{
void onbell(int);
printf("about to sleep for 4 seconds\n");
signal(SIGALRM, onbell); /* catch it */
alarm(4); /* set clock */
pause(); /* do nothing */
printf("Morning so soon?\n"); /* back to work */
return 0;
}
void
onbell(int s)
{
printf("Alarm received from kernel\n");
}
проблема есть, SIGALRM никогда не приходит через. Если я бегу Strace на нем, последние три строки:
rt_sigaction(SIGALRM, {0x80484c1, [ALRM], SA_RESTART}, {SIG_DFL, [], 0}, 8) = 0
alarm(4) = 0
pause(
Пауза никогда не возвращается. Когда я запускаю тот же код в системе, которая сообщает себя с Kernal: Linux 2.6.24-32-generic i686 GNU/Linux; Компилятор: GCC (GCC) 4.2.4 (Ubuntu 4.2.4-1ubuntu4) тот же код работает с Трассированием на нем показывает:
rt_sigaction(SIGALRM, {0x8048470, [ALRM], SA_RESTART}, {SIG_DFL}, 8) = 0
alarm(4) = 0
pause() = ? ERESTARTNOHAND (To be restarted)
--- SIGALRM (Alarm clock) @ 0 (0) ---
write(1, "Alarm received from kernel\n", 27Alarm received from kernel
) = 27
Любой идея, почему тревога никогда не взяла на Ubuntu 12.4 системы или что можно сделать, чтобы выяснить, что происходит?
«Когда я запускаю тот же код в другой системе», уже скомпилирован? Или скомпилировать его из источника снова? –
компиляция из источника на другой системе – Nate
Можете ли вы опубликовать свои версии компилятора для каждой версии и версии ядра? –