linux线程等待信号并启动,如何发送信号和线程里如何等待信号,请给出实例
时间: 2024-04-28 21:22:22 浏览: 87
在 Linux 中,可以使用信号来实现线程之间的同步和通信。下面是一个简单的例子,演示了如何发送信号和如何在线程中等待信号。
发送信号的例子:
```c
#include <signal.h>
#include <unistd.h>
int main()
{
// 发送 SIGUSR1 信号给进程 ID 为 12345 的进程
kill(12345, SIGUSR1);
return 0;
}
```
在上面的例子中,`kill` 函数用来向指定进程发送信号。第一个参数是进程的 ID,第二个参数是信号的编号。
等待信号的例子:
```c
#include <signal.h>
#include <stdio.h>
#include <unistd.h>
void signal_handler(int signum)
{
printf("Received signal %d\n", signum);
}
int main()
{
// 注册信号处理函数
signal(SIGUSR1, signal_handler);
// 等待信号
while (1)
{
sleep(1);
}
return 0;
}
```
在上面的例子中,使用 `signal` 函数注册了一个信号处理函数 `signal_handler`,当接收到 SIGUSR1 信号时,就会调用这个函数。然后使用 `while` 循环来等待信号的到来。由于信号可以在任何时间到达,因此需要使用循环来等待信号的到来。
在多线程程序中,可以使用 `pthread_kill` 函数向指定线程发送信号,使用 `pthread_sigmask` 函数来设置信号屏蔽字,使用 `pthread_cond_wait` 函数和 `pthread_cond_signal` 函数来实现线程之间的条件变量等待和通知。
阅读全文