私はこのコードを書いています。これは基本的に、必要な子スレッドの数を指定する引数を取り、フォークしてそれらを取得し、配列に格納されているすべての pid を出力します。
親だけが PID を必要とする場合はこれで問題ありませんが、子も IDS (pcid) を取得する必要があります。ネットからいくつかのコードをコピーして貼り付けたので(よくわかりませんでした)、なぜ機能しないのかわかりません。
最初の PID が印刷された後、セグメンテーション エラーが発生します。
ここで何が問題なのですか?
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/shm.h>
#include <sys/ipc.h>
int main(int argc, char *argv[])
{
if(argc < 2) {
printf("ERROR: No arguments fed.\n");
exit(-1);
}
int amount = atoi(argv[1]);
int i;
int pid = 1;
int pcid = 0;
key_t key;
int shmid;
int *arr[amount];
key = ftok("thread1.c",'R');
shmid = shmget(key, 1024, 0644 | IPC_CREAT);
for(i = 0; i < amount; i++)
{
if(pid != 0)
{
pid = fork();
}
*arr = shmat(shmid, (void *) 0, 0);
if(pid != 0)
{
*arr[i] = pid;
}
else
{
pcid = *arr[i];
break;
}
}
if(pid != 0)
{
printf("Printing PID Array:\n");
for(i =0; i < amount; i++)
{
printf("%d\n", *arr[i]);
}
}
else
{
printf("My PID: %d\n",pcid);
}
}