#include <stdio.h> #include <signal.h> #include <unistd.h> void conductor(int sig) { if (sig == 2) { kill(getppid(), SIGUSR1); } else if (sig == 3) { kill(getppid(), SIGUSR2); } else if (sig == SIGUSR1) { printf("please get off the bus!\n"); } else { printf("sig err\n"); } pause(); } void driver(int sig) { if (sig == SIGUSR1) { printf("let us gogogo!\n"); } else if (sig == SIGUSR2) { printf("stop the bus!\n"); } else if (sig == SIGTSTP) { kill(getppid(), SIGUSR1); } else { printf("sig err\n"); } pause(); } int main(int argc, char const *argv[]) { pid_t pid = fork(); if (pid < 0) { perror("fork err"); return -1; } else if (pid == 0) { signal(2, conductor); signal(3, conductor); signal(SIGUSR1, conductor); } else { signal(SIGUSR1, driver); signal(SIGUSR2, driver); signal(SIGTSTP, driver); } pause(); return 0; }
时间: 2024-02-14 17:23:27 浏览: 322
#include <stdio.h>
4星 · 用户满意度95%
这是一个使用信号进行进程间通信的示例代码,其中包括两个进程,一个是司机进程,一个是售票员进程。售票员进程负责向司机进程发送信号控制公交车的行驶,司机进程负责根据收到的信号做出相应的行动。
具体来说,售票员进程可以通过发送 SIGUSR1 信号来让司机进程启动公交车,通过发送 SIGUSR2 信号来让司机进程停止公交车。而司机进程则可以通过接收到售票员进程发送的 SIGUSR1 信号来输出 "let us gogogo!",接收到售票员进程发送的 SIGUSR2 信号来输出 "stop the bus!",同时还可以通过接收到 SIGTSTP 信号来让售票员进程输出 "please get off the bus!"。
在程序中使用了 signal 函数来注册信号处理函数,其中售票员进程注册了 3 个信号处理函数,分别对应了 SIGUSR1、SIGUSR2 和 SIGUSR1 信号,而司机进程则注册了 3 个信号处理函数,分别对应了 SIGUSR1、SIGUSR2 和 SIGTSTP 信号。程序运行后,父进程和子进程都会在 pause 函数处阻塞等待信号的到来,直到收到信号后再根据相应的信号处理函数进行处理。
阅读全文