给出linux下两个main程序直接进行signal通信例子
时间: 2024-09-13 08:03:03 浏览: 47
linux gcc如何处理sigpipe导致的程序退出.zip
在Linux环境下,两个程序之间通过信号(signals)进行通信通常涉及到发送者进程向接收者进程发送特定信号。下面是一个简单的示例,展示了如何在一个进程中创建一个监听信号的函数,然后在另一个进程中发送这个信号:
**发送信号的程序(sender.c):**
```c
#include <stdio.h>
#include <unistd.h>
#include <signal.h>
void signal_handler(int signum) {
printf("Signal %d received\n", signum);
}
int main() {
// 设置信号处理函数
signal(SIGINT, signal_handler);
// 发送SIGINT信号给接收者进程的PID
kill(收信者进程PID, SIGINT); // 替换为实际的进程ID
printf("Sender process sending a signal...\n");
sleep(2); // 留出时间让接收者接收到信号
return 0;
}
```
**接收信号的程序(receiver.c):**
```c
#include <stdio.h>
#include <sys/wait.h> // 使用waitpid
int main() {
int status;
while (1) {
pid_t child_pid = waitpid(-1, &status, WUNTRACED); // 监听子进程
if (child_pid > 0 && WIFSIGNALED(status)) { // 如果是信号结束
printf("Receiver process caught signal, child PID: %d\n", child_pid);
break; // 结束循环
}
}
printf("Receiver process exiting...\n");
return 0;
}
```
在这个例子中,`sender.c`进程启动后立即发送SIGINT信号给`receiver.c`进程(假设已知其PID)。`receiver.c`进程会一直等待并捕获到这个信号后结束。
**相关问题--:**
1. 如何确保信号能准确传递给目标进程?
2. 在Linux中还有哪些其他类型的信号可以用于进程间通信?
3. 除了信号外,Linux下的进程间通信还有哪些常见方式?
阅读全文