#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <pthread.h>
#include <semaphore.h>
#include <wait.h>
#include <signal.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <semaphore.h>
#include <sys/msg.h>
#include <sys/shm.h>
#include <sys/un.h>
typedef struct sockaddr_in addr_in_t;
typedef struct sockaddr addr_t;
typedef struct sockaddr_un addr_un_t;
pid_t pid, b_pid, A_pid;
void handler_a(int signum)
{
if (signum == SIGINT)
{
int fd = open("./b.txt", O_RDONLY);
read(fd, &b_pid, sizeof(pid_t));
close(fd);
printf("bpid=%d\n", b_pid);
kill(b_pid, SIGINT);
printf("a# process dead\n");
exit(0);
}
}
void handler_A(int signum)
{
if (signum == SIGTSTP)
{
wait(0);
printf("A# process dead\n");
exit(0);
}
}
int main(int argc, const char *argv[])
{
signal(SIGINT, handler_a);
signal(SIGTSTP, handler_A);
pid = fork();
if (pid > 0)
{
A_pid = getpid();
printf("A_pid=%d\n", A_pid);
int fd = open("./A.txt", O_WRONLY | O_TRUNC | O_CREAT, 0664);
write(fd, &A_pid, sizeof(pid_t));
close(fd);
while (1)
{
sleep(1);
}
}
else if (pid == 0)
{
while (1)
{
sleep(1);
}
}
return 0;
}
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <pthread.h>
#include <semaphore.h>
#include <wait.h>
#include <signal.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <semaphore.h>
#include <sys/msg.h>
#include <sys/shm.h>
#include <sys/un.h>
typedef struct sockaddr_in addr_in_t;
typedef struct sockaddr addr_t;
typedef struct sockaddr_un addr_un_t;
pid_t pid, b_pid, A_pid;
void handler(int signum)
{
if (signum == SIGINT)
{
printf("b# process dead\n");
exit(0);
}
if (signum == SIGCHLD)
{
int fd1 = open("./A.txt", O_RDONLY);
read(fd1, &A_pid, sizeof(pid_t));
printf("A_pid = %d\n", A_pid);
close(fd1);
kill(A_pid, SIGTSTP);
wait(0);
printf("B#process dead\n");
exit(0);
}
}
int main(int argc, const char *argv[])
{
signal(SIGINT, handler);
signal(SIGCHLD, handler);
pid = fork();
if (pid == 0)
{
b_pid = getpid();
printf("b_pid=%d\n", b_pid);
int fd = open("./b.txt", O_WRONLY | O_TRUNC | O_CREAT, 0664);
write(fd, &b_pid, sizeof(pid_t));
close(fd);
while(1)
{
sleep(1);
}
}
else if(pid > 0)
{
while(1)
{
sleep(1);
}
}
return 0;
}