我有代码:
int a = 0;
if (fork() == 0) {
a = a + 1;
printf("%d \n", a);
} else {
a = a - 1;
printf("%d \n", a);
}
我想知道这个代码是否总是为两个打印打印不同的值?
或者,如果我们在子进程加1之后进行上下文切换,那么父进程将减1。在这种情况下,我们将得到相同的值。问题是,我不确定变量'a‘是重复的,每个进程都会有不同的副本(然后我们总是会得到不同的值),或者是共享的(然后我提到的情况会导致相同的值打印两次)?
非常感谢!
在这个C程序中,数据不能在进程(即父进程和子进程)之间共享。子进程有自己的数据,父进程有自己的数据,但是指针显示两个进程的地址相同。它是如何在背景下进行的?叉子是否生成相同数据的副本?如果是,那么两个进程的指针地址是相同的。还是由于为每个进程复制静态分配的数据,并且每个进程的数据是独立的?我想知道是怎么做的?
#include<stdio.h>
#include<sys/types.h>
#include<unistd.h>
int main()
{
//Static Array
int X[] = {1,2,3,4,5};
int
我当时正在阅读Linux开发,并试图理解fork()情况下的进程地址空间语义。当我在Kernel v2.6的上下文中阅读时,以及在新版本中,任何子版本或父版本都可能先运行,但我对以下内容感到困惑:
Back in do_fork(), if copy_process() returns successfully, the new child is woken up
and run. Deliberately, the kernel runs the child process first. In the common case of the
child simply calling exec(
我的C类包括实现一个非常小的shell。
我们的shell检查用户的输入行是否有内部命令(例如cd或exit),如果没有找到,它会对输入行进行forks()和execs()。
我希望实现一个万无一失的分叉(这远远超出了这门课的职责范围,请不要让我自己做作业,这更多是为了了解linux的内部结构而进行的个人研究)。我目前的做法是:
t = fork();
if (t < 0) {
if (errno == ENOSYS) {
printf("fork() i