lab12

Run Settings
LanguageC
Language Version
Run Command
#include <stdio.h> #include <stdlib.h> #include <signal.h> #include <unistd.h> #include <sys/types.h> #include <sys/wait.h> void handle_child_signal(int sig) { printf("Child (PID=%d): Alarm went off\n", getpid()); kill(getppid(), SIGUSR1); exit(EXIT_SUCCESS); } void handle_parent_signal(int sig) { printf("Parent (PID=%d): Received SIGUSR1 from child after child's alarm\n", getpid()); } int main() { pid_t pid; int status; pid = fork(); // 1.fork하기 if (pid < 0) { // 예외처리 perror("Failed to fork child process.\n"); exit(EXIT_FAILURE); } else if (pid == 0) { // child process printf("Child (PID=%d): Setting alarm for 3 seconds and waiting via pause()\n", getpid()); signal(SIGALRM, handle_child_signal); alarm(3); // 2. pid==0 일때 set alarm, waiting signal SIGALARM pause(); } else { // pid > 0 즉 parent process. printf("Parent (PID=%d): Preparing waiting for SIGUSR1 via pause()\n", getpid()); signal(SIGUSR1, handle_parent_signal); pause(); // 기다리기. printf("Parent (PID=%d): Received SIGUSR1 from child after child's alarm\n", getpid()); printf("Parent (PID=%d): Setting alarm for 5 seconds and waiting via pause()\n", getpid()); alarm(5); pause(); printf("Parent (PID=%d): Sending SIGUSR2 to my child %d\n", getpid(), pid); kill(pid, SIGUSR2); waitpid(pid, &status, 0); printf("Child (PID=%d): Exited with status %d\n", pid, status); } return 0; }
Editor Settings
Theme
Key bindings
Full width
Lines