[Webinar] Streamline your web hosting managementRegister Today

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 483
  • Last Modified:

inter process communication

I have a program with a child and a parent process.

How can one process notify the other process that an event has occurred (by using signals) ?

please provide some code examples.
0
FOXBAT
Asked:
FOXBAT
  • 5
  • 2
1 Solution
 
sunnycoderCommented:
Hi FOXBAT,

what platform ?

Sunnycoder
0
 
sunnycoderCommented:
use kill to send a signal

#include <sys/types.h>

#include <signal.h>

int kill(pid_t pid, int sig);

http://www.die.net/doc/linux/man/man2/kill.2.html

parent gets a child pid when child is spawned and child can get parent pid by calling getppid()
http://www.die.net/doc/linux/man/man2/getppid.2.html
0
 
sunnycoderCommented:
Here are some examples and details
http://www.cs.cf.ac.uk/Dave/C/node24.html#SECTION002400000000000000000

http://www.delorie.com/gnu/docs/glibc/libc_503.html

I would recommend using sigaction interface instead of signal interface
0
Get Certified for a Job in Cybersecurity

Want an exciting career in an emerging field? Earn your MS in Cybersecurity and get certified in ethical hacking or computer forensic investigation. WGU’s MSCSIA degree program was designed to meet the most recent U.S. Department of Homeland Security (DHS) and NSA guidelines.  

 
FOXBATAuthor Commented:
can you please modify this code to send a signal from one process to the other

if(pid == 0) // child
{  
      printf("child %d is sleeping \n", getpid());
      sleep(1);
}


while(waitpid(pid, &status, WNOHANG) == 0) // parent
{
      printf("waitin....\n");
      sleep(1);

}
0
 
sunnycoderCommented:
who should send signal to whom and which signal ? .. added a line below

if(pid == 0) // child
{  
     printf("child %d is sleeping \n", getpid());
     sleep(1);
}


while(waitpid(pid, &status, WNOHANG) == 0) // parent
{
     printf("waitin....\n");
     sleep(1);
     kill (pid, SIGUSR1);  <-- parent will send SIGUSR1 to child. Since you used pid == 0 to check for a child, I assume that pid holds the pid for the child and appropriate error checking for fork has been done
}
0
 
FOXBATAuthor Commented:
ok so how does the child recive the signal?

can you please provide the example in the code above
0
 
sunnycoderCommented:
Check the second link I posted for a complete example
http://www.delorie.com/gnu/docs/glibc/libc_503.html
0
 
grg99Commented:
The signal() way of communication is a rather narrow and slow channel.

If you just want to pass a byte every second, signal is okay.

If you need much more bandwidth, I'd use a TCP connection.  

0

Featured Post

Creating Active Directory Users from a Text File

If your organization has a need to mass-create AD user accounts, watch this video to see how its done without the need for scripting or other unnecessary complexities.

  • 5
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now