用C语言实现两进程间的通信

先决条件: C.信号处理

null

在本文中,子进程和父进程之间的通信是使用kill()和signal()、fork()系统调用完成的。

  • fork() 从父进程创建子进程。可以检查pid以确定它是子进程(如果pid==0)还是父进程(pid=子进程id)。
  • 然后,父对象可以使用pid和kill()向子对象发送消息。
  • 孩子用signal()拾取这些信号并调用适当的函数。

两个进程如何使用kill()和signal()相互对话的示例:

// C program to implement sighup(), sigint()
// and sigquit() signal functions
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
// function declaration
void sighup();
void sigint();
void sigquit();
// driver code
void main()
{
int pid;
/* get child process */
if ((pid = fork()) < 0) {
perror ( "fork" );
exit (1);
}
if (pid == 0) { /* child */
signal (SIGHUP, sighup);
signal (SIGINT, sigint);
signal (SIGQUIT, sigquit);
for (;;)
; /* loop for ever */
}
else /* parent */
{ /* pid hold id of child */
printf ( "PARENT: sending SIGHUP" );
kill(pid, SIGHUP);
sleep(3); /* pause for 3 secs */
printf ( "PARENT: sending SIGINT" );
kill(pid, SIGINT);
sleep(3); /* pause for 3 secs */
printf ( "PARENT: sending SIGQUIT" );
kill(pid, SIGQUIT);
sleep(3);
}
}
// sighup() function definition
void sighup()
{
signal (SIGHUP, sighup); /* reset signal */
printf ( "CHILD: I have received a SIGHUP" );
}
// sigint() function definition
void sigint()
{
signal (SIGINT, sigint); /* reset signal */
printf ( "CHILD: I have received a SIGINT" );
}
// sigquit() function definition
void sigquit()
{
printf ( "My DADDY has Killed me!!!" );
exit (0);
}


输出: 图片[1]-用C语言实现两进程间的通信-yiteyi-C++库

© 版权声明
THE END
喜欢就支持一下吧
点赞11 分享