【发布时间】:2016-08-30 13:49:41
【问题描述】:
我正在学习signal(),我有这两个文件:
server.c:
void handler_sigcont(){
printf("SIGCONT server\n");
}
int main(){
signal(SIGCONT,handler_sigcont);
printf("%d\n",getpid());
kill(getpid(),SIGSTOP);
printf("server!\n");
}
client.c:
int main(int argc, char** argv){
kill(atoi(argv[1]),SIGCONT);
printf("client!\n");
}
首先我执行 server.c,这是输出:
6999
[7]+ Stopped ./sobusrv
然后我像这样执行client.c:
./client 6999
唤醒进程 6999。 输出如下:
client!
SIGCONT server
server!
[8] Done ./sobusrv
但是,如果在 server.c 中,我在 kill() 之后更改了 signal(),如下所示:
void handler_sigcont(){
printf("SIGCONT server\n");
}
int main(){
printf("%d\n",getpid());
kill(getpid(),SIGSTOP);
printf("server!\n");
signal(SIGCONT,handler_sigcont);
}
我得到这个输出:
client!
server!
[8] Done ./sobusrv
我想知道为什么在signal() 写在kill() 之后会避免处理程序。
【问题讨论】:
-
您已停止进程,因此它不会执行
signal调用。