【问题标题】:Why does the ntimes doesn't add one in child process?为什么 ntimes 不在子进程中添加一个?
【发布时间】:2017-07-25 04:08:42
【问题描述】:

代码如下:

#include <signal.h>
#include <stdlib.h>
#include <stdio.h>

int ntimes = 0;

int main()
{
  int pid,ppid;
  int p_action(),c_action();

  /* set parent process SIGUSR1 */
  signal(SIGUSR1,p_action);

  switch(pid=fork()){
  case -1: /* fork failed */
    perror("synchro");
    exit(1);
  case 0:  /* child process mode */
    /* set child process SIGUSR1 */
    signal(SIGUSR1,c_action);

    /* get parent process */
    ppid = getppid();

    for(;;){
      sleep(1);
      kill(ppid,SIGUSR1);
      pause();
    }

    /* dead loop */
    break;

  default: /* parent process mode */
    for(;;){
      pause();
      sleep(1);
      kill(pid,SIGUSR1);
    }
    /* dead loop*/
  }

  return 0;
}

p_action()
{
  printf("Parent caught signal #%d\n",++ntimes);
}

c_action()
{
  printf("Child caught signal #%d\n",++ntimes);
}

输出是:

父捕获信号 #1 孩子捕捉到信号 #1 父母捕获信号#2 孩子捕捉到信号 #2 父母捕获信号 #3 孩子捕捉到信号 #3 . . .

为什么 child 的 ntimes 与 parent 相同但不是 ++1,例如 parent-1、child-2、parent-3、child-4、...

谢谢!

【问题讨论】:

  • 顺便说一句,所示代码没有使用任何循环,因此您提供的输出是由其他来源创建的。

标签: c linux operating-system fork


【解决方案1】:

父母和孩子(dren)共享同一组变量。

父级的变量在创建时被“复制”到子级,然后子级独立地使用自己的变量,就像父级对其变量所做的那样。

【讨论】:

  • 谢谢!这对我来说很有意义
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-22
  • 1970-01-01
  • 1970-01-01
  • 2016-04-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多