不继承。
fork的POSIX 规范明确提到计时器不是继承的并且 XSI ( timer_create
/ timer_settime
) 计时器被重置:
- [XSI] [Option Start] 间隔计时器应在子进程中重置。[选项结束]
- 父进程创建的每进程计时器不应被子进程继承。
一个测试程序,如:
#include <unistd.h>
#include <stdio.h>
#include <signal.h>
#include <signal.h>
#include <string.h>
#include <sys/time.h>
void h(int Sig)
{
char pid[20];
sprintf(pid,"%d\n",(int)getpid());
(void)write(1,pid,strlen(pid));
}
int main()
{
if(0>sigaction(SIGALRM,&(struct sigaction){.sa_handler=h},0)) return perror("sigaction"),1;
if(0>setitimer(ITIMER_REAL, &(struct itimerval){.it_value.tv_sec=1},0)) return perror("setitimer"),1;
pid_t ch; if(0>(ch=fork())) return perror("fork"),1;
pause();
if(ch){
sleep(1);
kill(ch,SIGTERM);
}
_exit(0);
}
显示处理程序只在父进程中运行——它只打印一个 pid。