IPC在linux上使用信号
使用信号捕获和信号提升可以进行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机制.当用作其他任何东西时,信号有几个问题:
>许多系统调用将被信号中断,需要特殊处理.
理论上你可以使用几个来回的信号设置某种类型的通道,其中一些信号像某种确认,但没有理智的人会想要尝试类似的东西.您也可以使用烟雾信号代替…… (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |