加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

IPC在linux上使用信号

发布时间:2020-12-14 01:38:06 所属栏目:Linux 来源:网络整理
导读:使用信号捕获和信号提升可以进行IPC(进程间通信)吗? 我制作了两个节目.在第一个程序中,我处理了信号,而在另一个程序中,我只是提出了我想在另一个程序中处理的信号.我工作正常,但我希望使用信号在这两个程序之间进行通信,并且还希望使用此提升信号发送一些字
使用信号捕获和信号提升可以进行IPC(进程间通信)吗?

我制作了两个节目.在第一个程序中,我处理了信号,而在另一个程序中,我只是提出了我想在另一个程序中处理的信号.我工作正常,但我希望使用信号在这两个程序之间进行通信,并且还希望使用此提升信号发送一些字节数据.我怎样才能做到这一点?

我也希望用这个信号传递消息.我可以做吗?有可能的?

而且,IPC机制使用信号的缺点和优势是什么?

以下是我的两个程序的工作代码.就是这样,我只能提升信号并捕获信号,但我想将数据从一个程序传递到另一个程序.

在第二个程序中,我使用了第一个程序的进程ID.我怎样才能让它变得动态.

第一个程序:

/* Example of using sigaction() to setup a signal handler with 3 arguments
 * including siginfo_t.
 */
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
#include <string.h>

static void hdl (int sig,siginfo_t *siginfo,void *context)
{
    printf("sig no = %d n",sig);
    if(sig == SIGINT)
        exit(0);
    printf ("Sending PID: %ld,UID: %ldn",(long)siginfo->si_pid,(long)siginfo->si_uid);
}

int main (int argc,char *argv[])
{
    struct sigaction act;


    sigemptyset(&act.sa_mask);

    act.sa_sigaction = &hdl;
    act.sa_flags = SA_SIGINFO;

    if (sigaction(SIGUSR1,&act,NULL) < 0) {
        perror ("sigaction SIGUSR1");
        return 1;
    }
    if (sigaction(SIGINT,NULL) < 0) {
        perror ("sigaction SIGINT");
        return 1;
    }

    while (1)
    {
        sleep(1);
    }

    return 0;
}

第二个计划

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

void  main(void)
{

   while (1)
    {
        sleep(1);
        kill(11558,SIGUSR1);
    }

}

解决方法

Signals旨在提供对过程的基本控制形式,而不是IPC机制.当用作其他任何东西时,信号有几个问题:

>许多系统调用将被信号中断,需要特殊处理.
>因此,野外的许多代码都不是信号安全的.
>信号没有任何类型的数据内容,除了他们自己.这使得它们作为消息传递方法大多无用.
>在信号处理程序中只能做很多事情.
>最重要的是,相同类型的后续信号不会排队 – 它们会合并为一个实例.
>更重要的是,无法保证信号的输送顺序与生成的顺序相同.从手册页:

By contrast,if multiple standard signals are pending for a process,the order in which
they are delivered is unspecified
.

理论上你可以使用几个来回的信号设置某种类型的通道,其中一些信号像某种确认,但没有理智的人会想要尝试类似的东西.您也可以使用烟雾信号代替……

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读