我正在学习有关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");
}
首先我执行服务器。 c,这是输出:
6999
[7]+ Stopped ./sobusrv
然后,我执行client.c这样的:
./client 6999
要唤醒过程6999 输出是以下之一:
client!
SIGCONT server
server!
[8] Done ./sobusrv
但是,如果,在server.c,我改变signal()
kill()
后,像这样:
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
我想知道为什么在kill()
之后写signal()
时避免使用处理程序。
您已停止的过程,因此不会执行'signal'电话。 – kaylum