父子之间的信号和C中的叉子

时间:2017-11-30 14:43:34

标签: linux signals fork wait sleep

各位大家好,感谢您花时间回答我。 我有一点问题:

问题是:  用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秒没有睡觉。 有人有想法吗?

谢谢!

1 个答案:

答案 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()发送消息时,子进程将被唤醒。您只需要评论发送信号的位置。