【问题标题】:Accessing parent through child通过孩子访问父母
【发布时间】:2013-01-24 21:08:25
【问题描述】:

基本上,我有这个功能。在 fgets 之后,我希望父母通过将其 play 变量更改为 0 来让孩子停止。我该怎么做?

    void readQuestion(char * question) {
      int play = 1;
      char inputline[256];
      int s;
      char * holder;
      int p = fork();
      if (p == 0) {
        while(play) {
          holder = strsep(&question," ");
          if(holder) {
        printf("%s\n",holder);
        sleep(1);
          }
          else{
        play = 0;
          }
        }
      }
      else {
        fgets(inputline,256,stdin);
        printf("%s",inputline);
        kill();
      }
    }

【问题讨论】:

  • 您必须找到一种在进程之间共享数据的方法,这是fork() 自己无法做到的。您可以在每个示例、信号中使用共享内存,或者只使用多线程。
  • 你认为我可以通过父进程杀死子进程?如果是这样,那将是什么代码?
  • 一旦你fork()你有两个独立的进程,如果没有某种形式的IPC,比如管道,它们就无法交互。
  • @AhsanQureshi:您始终可以在子进程中配置信号处理程序并从父进程发送信号。只是杀了孩子,似乎不太干净。这也是您了解线程或至少是信号的绝佳机会。

标签: c multithreading fork


【解决方案1】:

为此,您需要采用两种方法之一...

  1. 使用消息 API 发送消息,例如 signal(7)socket(7)
  2. 如果你真的想调整孩子的记忆力,你不需要fork(2),而是a thread library.

【讨论】:

    【解决方案2】:

    您可能不想分叉,而是创建一个线程。 Fork 正在创建一个新进程,因此您将有两个进程,每个进程都有自己的“play”变量副本

    看... http://www.geekride.com/fork-forking-vs-threading-thread-linux-kernel/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多