gpt4 book ai didi

c - 多个进程中的静态变量(信号)

转载 作者:太空宇宙 更新时间:2023-11-04 12:41:28 26 4
gpt4 key购买 nike

我有 2 个进程在运行 test.c。 test.c 中有一个信号处理程序,它执行一个 execlp。在 test.c 中,我有一个静态变量,它只需要初始化一次,并且每次在 execlp 调用之前递增。当任一进程达到 99 时,它们退出。

不幸的是,现在,它没有增加,我的猜测是因为有 2 个进程,每个进程都有一个静态变量的副本。这是 test.c:

#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>

static int i = 0;

static int foo(int j)
{
printf("In the foo...\n");
j++;
printf("%d\n", j);
return j;
}


void main(int argc, char *argv[])
{
int pid, pid2, k;
int *h = malloc(sizeof(int));
int g = 0;
h = &g;

static char s[15];


pid = fork();
if (pid > 0)
{
sleep(1);
}

if (pid == 0)
{
k = foo(*h);

sprintf(s, "%d", k);
if (k >= 99)
{
printf("k=99\n");
exit(0);
}
execlp("./a.out", "forktest", s, NULL);
}

pid2 = fork();

if (pid2 == 0)
{

k = foo(*h);

sprintf(s, "%d", k);
if (k >= 99)
{
printf("k=99\n");
exit(0);
}
execlp("./a.out", "forktest", s, NULL);

}

wait(pid2);
wait(pid);
}

谁能解释一下为什么会出现无限循环?为什么静态变量不递增?

谢谢。

最佳答案

这里使用进程间通信概念(管道、fifo、共享内存),execlp 函数用新程序覆盖当前程序的内存。因此,当您调用 execlp 时,您的程序会刷新并从头开始,并且 static int i 始终为 0。

我推荐使用pipe Refer this .

关于c - 多个进程中的静态变量(信号),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40070900/

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