PIDを保持するためにプロセス間で共有メモリを使いたいと思っています。PIDを保持するためのグローバル配列。 Fork()、Unix procesess、Cプログラミング
グローバル配列pid_t型を作成し、配列の要素の値を変更したforkという新しいプロセスを使用しました。
なぜ、親プロセスの配列は、配列が同じものを指している場合に変更されないのですか?
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
pid_t p[1];
int main()
{
pid_t f;
f = fork();
if(f == 0)
{
p[0] = getpid();
printf("Child ... p[0] PID = %d\n", (int)p[0]);
printf("points at %ld\n", (long int)p);
}
else if (f > 0)
{
sleep(1);
printf("Parent... p[0] PID = %d\n", (int)p[0]);
printf("points at %ld\n", (long int)p);
}
else
{
printf("Fork() error \n");
exit(1);
}
}
'fork()'の一般的な考慮事項1)子プロセスは 'exit()'の呼び出しで終了しなければなりません。2)終了前に親プロセスは 'wait()'または 'waitpid子供が最初に出て行く。さもなければ、子供はコンピュータを再起動せずに排除することが非常に困難な「ゾンビ」プロセスになる。 3)共有メモリを使いたい場合は、共有メモリに必要な関数であるshmat() '' shmget() '' shmctl() '' shmdt() '' ftok() – user3629249