Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <fcntl.h>
- #include <unistd.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <signal.h>
- void parent_work(int signo);
- void child_work(int signo);
- void syserr_quit(char *msg);
- pid_t parent_pid;
- pid_t child_pid;
- int main () {
- parent_pid = getpid();
- printf("parent pid: %d\n", parent_pid);
- pid_t pid = fork();
- if (pid < 0) {
- syserr_quit("fork error");
- } else if (pid == 0) {
- signal(SIGUSR2, child_work);
- while (1) {}
- } else {
- child_pid = pid;
- printf("child pid: %d\n", pid);
- signal(SIGUSR1, parent_work);
- while (1) {}
- }
- }
- void child_work (int signo) {
- sleep(1); // fake child work
- // signal parent that a write is now possible
- printf("send signal to %d\n", parent_pid); fflush(stdout);
- if (kill(parent_pid, SIGUSR1) < 0) syserr_quit("kill error");
- printf("signal sent\n"); fflush(stdout);
- // wait for parent signal
- pause();
- }
- void parent_work (int signo) {
- sleep(1); // fake parent work
- // signal child that a read is possible
- printf("send signal to %d\n", child_pid); fflush(stdout);
- if (kill(child_pid, SIGUSR2) < 0) syserr_quit("kill error");
- printf("signal sent\n"); fflush(stdout);
- // wait for child signal
- pause();
- }
- void syserr_quit(char *msg) {
- perror(msg);
- exit(EXIT_FAILURE);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement