各位大家好,感谢您花时间回答我。 我有一点问题:
问题是: 用fork()做一个程序。儿子睡10秒钟,父亲睡1秒钟,并向他的儿子发送信号SIGUSR1,并等待儿子完成他的计划。
我做到了:`
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/wait.h>
void tononcle (int sig){
printf("signal %d recu\n",sig);
}
int main (){
int pid,status;
pid = fork();
if(pid){
printf("%s\n","Pere");
sleep(1);
kill(pid,SIGUSR1);
wait(&status);
exit(0);
}
else{
printf("%s\n","fils");
sleep(10);
signal(SIGUSR1,tononcle);
exit(0);
}
return 0;
}`
问题是我的儿子在他的节目结束前10秒没有睡觉。 有人有想法吗?
谢谢!
答案 0 :(得分:0)
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/wait.h>
void tononcle (int sig){
printf("signal %d recu\n",sig);
}
int main (){
int pid,status;
pid = fork();
switch(pid) {
case -1:
printf("Fork failed");
break;
case 0:
signal(SIGUSR1,tononcle);
printf("%s\n","fils");
sleep(10);
break;
default:
printf("%s\n","Pere");
sleep(1);
//kill(pid,SIGUSR1);
waitpid(-1, &status, 0);
exit(0);
}
return 0;
}
当您使用kill()发送消息时,子进程将被唤醒。您只需要评论发送信号的位置。