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

signal between father and son and fork in C

大家好,感谢抽空回答我。 我有一个小问题:

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

谢谢!!

#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() 发送消息时,子进程被唤醒。你只需要评论你发送信号的线路。