0

ポインタを使用して、子プロセスを持つ親プロセスのpidを取得したい:

int main(void){
  pid_t childPid,*parentPid,pid;
  childPid = fork();
  if(childPid == 0 ){
    printf("[Child] the parent pid is 0x%u\n", *parentPid);
  }else if(childPid < 0){
    printf("there is something wrong");
  }else{
    pid = getpid();
    printf("[Parent] the pid is 0x%u\n",pid);
    parentPid = &pid;
  }
  return (EXIT_SUCCESS);
}

出力は次のとおりです。

[Parent] the pid is 0x5756
[Child] the parent pid is 0x1

私のコードに何か問題があるに違いありません。

4

1 に答える 1

2

子は を変更*parentPidしないため、ランダムなガベージが含まれているだけです。親 PID が必要な場合は、 に電話してくださいgetppid

競合状態を修正しても、コードは機能しません。親のメモリを変更しても、メモリが共有されていない限り、子のメモリは変更されません。すべてのメモリがデフォルトで共有されている場合、子と親は互いのデータを即座に消去し、完全な混乱を引き起こします。

于 2012-08-08T02:29:45.270 に答える