/********************************************************************************* * Copyright: (C) 2025 LingYun IoT System Studio * All rights reserved. * * Filename: signal.c * Description: This file is signal example program * * Version: 1.0.0(11/07/2025) * Author: Guo Wenxue * ChangeLog: 1, Release initial version on "11/07/2025 10:18:12 AM" * ********************************************************************************/ #include #include #include #include #include #include #include int g_child_stop = 0; int g_parent_run = 0; void sig_child(int signum) { if( SIGUSR1 == signum ) { g_child_stop = 1; } } void sig_parent(int signum) { if( SIGUSR2 == signum ) { g_parent_run = 1; } } int main(int argc, char **argv) { int pid; int wstatus; signal(SIGUSR1, sig_child); signal(SIGUSR2, sig_parent); if( (pid=fork()) < 0 ) { printf("Create child process failure: %s\n", strerror(errno)); return -2; } else if(pid == 0) { /* child process can do something first here */ printf("Child process working...\n"); sleep(1); printf("Child process done and send parent signal SIGUSR2\n"); kill(getppid(), SIGUSR2); while( !g_child_stop ) { sleep(1); } printf("Child process receive signal from parent and exit now\n"); return 0; } printf("Parent hangs up to wait for signal from child\n"); while( !g_parent_run ) { sleep(1); } /* parent process can do something here */ printf("Parent process working...\n"); sleep(1); printf("Parent process done and send child signal SIGUSR1\n"); kill(pid, SIGUSR1); /* parent wait child process exit */ wait(&wstatus); printf("Parent process receive signal from child and exit now\n"); return 0; }