sigusr.c.texi

来自「一个C源代码分析器」· TEXI 代码 · 共 62 行

TEXI
62
字号
@group#include <signal.h>#include <stdio.h>#include <sys/types.h>#include <unistd.h>@end group/* @r{When a @code{SIGUSR1} signal arrives, set this variable.} */volatile sig_atomic_t usr_interrupt = 0;void synch_signal (int sig)@{  usr_interrupt = 1;@}/* @r{The child process executes this function.} */void child_function (void)@{  /* @r{Perform initialization.} */  printf ("I'm here!!!  My pid is %d.\n", (int) getpid ());  /* @r{Let parent know you're done.} */  kill (getppid (), SIGUSR1);  /* @r{Continue with execution.} */  puts ("Bye, now....");  exit (0);@}intmain (void)@{  struct sigaction usr_action;  sigset_t block_mask;  pid_t child_id;  /* @r{Establish the signal handler.} */  sigfillset (&block_mask);  usr_action.sa_handler = synch_signal;  usr_action.sa_mask = block_mask;  usr_action.sa_flags = 0;  sigaction (SIGUSR1, &usr_action, NULL);  /* @r{Create the child process.} */  child_id = fork ();  if (child_id == 0)    child_function ();          /* @r{Does not return.} */@group  /* @r{Busy wait for the child to send a signal.} */  while (!usr_interrupt)    ;@end group  /* @r{Now continue execution.} */  puts ("That's all, folks!");  return 0;@}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?