gpt4 book ai didi

c - 来自一个父进程的多个子进程

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:27:20 24 4
gpt4 key购买 nike

我正在使用 fork 实现一个简单的父/子进程程序。我的目标是从单个父进程创建用户输入数量的子进程,并将它们的 PID 存储在动态数组中。我设法使用 fork 创建子进程(我认为)并存储它们的 PIDS。但是,当我存储 PID 时,我还存储了 0 PID 以及我认为与进程相关的另一个 PID,但这个数字比子进程和父进程大得多。

当显然这只在父进程中完成时,为什么会发生这种情况?

void createProcesses(int nProcess) {
int i;
int PID;
processIDS = calloc(nProcess, sizeof(long));

printf("*****Creating Processes*****\n");

printf("Parent Process: PID %d\n", getpid());
for (i = 0; i < nProcess; i++) {
PID = fork();
if (PID == 0) {
printf("Child Process: PID %d\n", getpid());
while(1){}
}
else if(PID != 0) {
// sleep(3);
// printf("Number of child processes created: %d\n", nProcess);
// updateProcessList();
*(processIDS + i) = PID;
printf("%d\n", PID);
}
}
for(i = 0; i < sizeof(processIDS); i++) {
printf("%ld\n", *(processIDS + i));
}
while(1) {
sleep(5);
updateProcessList();
}
}

processIDS is a long * global variable.

最佳答案

问题出在这里:

  for(i = 0; i < sizeof(processIDS); i++) {
printf("%ld\n", *(processIDS + i));
}

因为processIDS是一个指针,它的大小是一个long *的大小,大概是4或者8,这不是你想要的。如果 nProcess 的值小于此值,您将读取动态分配数组的末尾,调用未定义的行为。

您知道创建了 nProcess 个进程,因此将其用于您的循环测试:

  for(i = 0; i < nProcess; i++) {
printf("%ld\n", *(processIDS + i));
}

关于c - 来自一个父进程的多个子进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36455313/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com