关于kill与signal函数

killsignal 是用于进程间通信的信号处理相关函数。

kill 函数用于向指定的进程发送信号。其函数原型为:

int kill(pid_t pid, int sig);
  • pid 参数表示目标进程的进程号,如果 pid 为正数,则将信号发送给进程号为 pid 的进程;如果 pid 为 0,则信号将发送给当前进程所在进程组的所有进程;如果 pid 为 -1,则信号将发送给除系统进程和当前进程之外的所有进程;如果 pid 小于 -1,则信号将发送给进程组号等于 pid 的所有进程。

  • sig 参数表示要发送的信号类型,例如 SIGTERM 表示终止进程。可以使用 man 7 signal 命令查看 Linux 中支持的信号类型。

signal 函数用于设置信号处理函数。其函数原型为:

typedef void (*sighandler_t)(int);

sighandler_t signal(int signum, sighandler_t handler);
  • signum 参数是指定的信号代码。

  • handler 参数可以是自定义的信号处理函数,也可以是 SIG_IGN(表示忽略该信号)或 SIG_DFL(表示使用默认处理方式)。

示例代码中使用了 signal 函数来设置 SIGALRM 信号的处理函数为 my_alarmkill 函数用于发送 SIGALRM 信号。wait 函数用于等待子进程的退出,并获取子进程的退出状态。

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>

void my_alarm() {
    printf("ding~~~\n");
}

int main() {
    pid_t new_pid = fork();

    if (new_pid == -1) {
        perror("[err]");
    }

    if (new_pid > 0) {
        printf("parent\n");
        signal(SIGALRM, my_alarm);
        wait(NULL);
        exit(1);
    }

    if (new_pid == 0) {
        printf("child\n");
        int i;
        for (i = 0; i < 5; i++)
            sleep(1);
        kill(getppid(), SIGALRM);
        exit(0);
    }

    return 0;
}

这段代码的逻辑是创建一个子进程,在子进程中等待一段时间后,向父进程发送 SIGALRM 信号,父进程接收到该信号后执行 my_alarm 函数。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

公孙无语

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值