Linux 信号(signal):信号的相关函数

  使用信号时离不开各种函数,本文来看看在使用信号时最常用的几个函数。

  1. kill:给指定进程发送指定信号
  2. raise:给调用进程发送指定信号
  3. abort:终止程序的运行
  4. alarm:定时器
  5. sigqueue:给指定进程发送指定信号并携带信息
  6. signal:修改指定信号的处理方式

1.kill

int kill(pid_t pid, int sig)

 作用:给指定的进程发送一个指定的信号。

  • pid_t pid:指定的进程id
  • int sig:要发送的信号。注意:信号其实是一个宏。

 返回值:成功返回0,失败返回-1。

2.raise

int raise(int sig)

 作用:给调用这个函数的进程发送一个指定的信号。

  • int sig:发送的信号

 返回值:成功返回0,失败返回非0。

3.abort

void abort()

 作用:中止程序执行,直接从调用的地方跳出。这其实是一个异常。SIGABRT

4.alarm

unsigned int alarm(unsigned int seconds)

 作用:这个是定时器,当程序调用这个函数之后,开始计时,当计时到达规定时间后,内核会发送SIGALRM信号(信号作用:退出进程)给进程。

  • unsigned int seconds:要计时的时间长度

5.sigqueue

int sigqueue(pid_t pid, int sig, const union sigval value)

 作用:给指定进程发指定信号并携带信息。

  • pid_t pid:指定的进程id
  • int sig:要发送的信号
  • const union sigval value:要携带的信息,通常并不会携带信息,因此通常置NULL

 返回值:成功返回0,失败返回非0。

6.signal

 typedef void (*sighandler_t)(int)

 这是声明了一个返回值为void,参数为int的函数指针类型

sighandler_t signal(int signum, sighandler_t handler)

 作用:修改指定信号的处理方式

  • int signum:传入指定信号
  • sighandler_t handler:该信号新的处理方式。可以传入自定义的信号处理函数 或者 SIG_DFL(默认处理方式)或者 SIG_IGN(忽略处理方式)

 返回值:该信号原先的信号处理函数

7.例子

 这里来展示一下如何修改指定信号的处理函数。

(1)定义自定义处理函数:

  • void sigcb(int no){}

  注意自定义处理函数的形式,函数的形式必须和系统的默认处理函数相同,返回值为void,参数为int。

  这个 int no 参数其实就是这个处理函数对应的信号,调用这个处理函数时,就会把信号作为参数传递进去。

(2)修改3号信号的处理函数为sigcb函数:

  • signal(3,sigcb)

 signal函数的返回值是3号信号原先的处理函数。

猜你喜欢

转载自blog.csdn.net/weixin_57761086/article/details/128781900
今日推荐