我爲alarm()
創建了一個signal handler
。父母派出另一個沒有待處理的警報信號的過程。所以,警報只在父進程中調用。 但是當alarm(2)
被調用時,它會覆蓋父進程中的sleep(10)
。家長只在打印前等待2秒鐘:C中的alarm(int)可以覆蓋sleep(int)嗎?
"parent retval=8"
而孩子等待10秒。爲什麼alarm()
信號覆蓋sleep()
,並確實返回任何東西(顯然它在這種情況下,但爲什麼?sleep()
不應該返回任何東西,對吧?)?
代碼如下。
<headers>
pid_t cpid;
int main() {
int retval;
signal(SIGALRM, handler);
alarm(2);
if ((cpid = fork()) == 0) {
printf(「I’m the child\n」);
retval = sleep(10);
printf(「child retval=%d\n」, retval);
}
else {
printf(「I’m the parent\n」);
retval = sleep(10);
printf(「parent retval=%d\n」, retval);
}
}
/* Handle SIGALRM */
void handler(int sig)
{
if (cpid == 0)
printf(「running child handler\n」);
else
printf(「running parent handler\n」);
}
謝謝!我對於鬧鐘對睡眠有什麼影響感到困惑,但它現在清晰了! – Krishh