标签: fork

fork开始执行表单在哪里?

对于我之前关于分段错误的问题,我得到了非常有用的答案.谢谢那些已经回复的人.

#include<stdio.h>
main()
{
 printf("hello");
int pid = fork();
wait(NULL);
}
Run Code Online (Sandbox Code Playgroud)

输出:hellohello.

在此,子进程从头开始执行.如果我没有错,那么如果我把sem_open放在fork()之前程序是如何工作的(ref答案:prev questions)

我需要一个关于分段故障的清晰解释,这种故障偶尔发生而不是总是发生 为什么不总是...如果编码中有任何错误,那么它应该始终正确...?

c linux fork semaphore segmentation-fault

-1
推荐指数
1
解决办法
317
查看次数

在C中,如果父进程终止,那么子进程是否会自动终止?

如果我fork()用来生成子进程,那么一旦父进程终止,子进程会自动终止吗?或者必须编程吗?

c operating-system fork

-1
推荐指数
1
解决办法
99
查看次数

c中fork()&& fork()|| fork()的含义是什么?

我对fork进程有疑问.我有一个代码

int main(int c, char **v){
  fork();
  fork() && fork() || fork();
  printf("Hello\t");
}
Run Code Online (Sandbox Code Playgroud)

据我说,上面代码的输出将是2 4 = 16次"Hello",因为每个fork创建它自己的两个副本,所以总体变成2*2*2*2哪些是16时间"Hello".但它不正确它给我输出的10次数你好.这里发生了什么?

c fork

-1
推荐指数
1
解决办法
750
查看次数

使用 Fork() 创建进程

在运行以下代码时:

#include <stdio.h>
#include <unistd.h>
static int x = 0;
int main(int argc, char *argv[])
{
    pid_t p = getpid();
    fork();
    x++;

    if (! fork()) {
      x++;
      if (fork()) {
          x++;
      }
    }

    printf("p%d: x = %d\n", getpid() - p, x);
    sleep(60);
     return 0;
}
Run Code Online (Sandbox Code Playgroud)

我得到以下输出:

p0: x = 1
p1: x = 1
p2: x = 3
p3: x = 3
p4: x = 2
p5: x = 2
Run Code Online (Sandbox Code Playgroud)

我不太明白这些值是如何以及在哪里增加的。的原始处理(P0)执行main()函数。第一个 fork() 创建一个 子进程 (p1)。然后,p0 和 p1 …

c unix linux fork system-calls

-1
推荐指数
1
解决办法
165
查看次数

Fork - 父和子如何运行,即使它是if else

问题A:

鉴于下面的代码,我理解当你调用一个fork时,大多数情况下,如果它的资源被传递给子进程.现在,我所查找的几乎所有Fork示例都设置得像我所拥有的那样.从它的外观来看,我不明白如何调用父进程,因为它在else块中.

问题B:

执行子进程中的代码后,它是否自动知道它现在必须进入父进程?我在其他示例中也看到了等待(NULL),如果它将要进入else块,那等待的作用是什么.假设我想要执行同一父项的两个子进程,这两个是否并行运行,然后在完成后运行父代码?谢谢.

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

int main()
{
        pid_t pid;
        pid = fork();

        if(pid == 0){
                printf("Hello World");
        }
        else{
                printf("Hello World");
        }
        return 0;
}
Run Code Online (Sandbox Code Playgroud)

c unix fork

-2
推荐指数
1
解决办法
1327
查看次数

错误:'SIGKILL'未声明(首次使用此功能)

好吧,我试图做一个简单的功能来不断改变它的PID,但我明白了:

error: ‘SIGKILL’ undeclared (first use in this function)
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

#include <stdio.h>

int changePID(void) {
        int pid = fork();
        printf(pid);
        sleep(3);
        kill(pid, SIGKILL);
}

    int main(void) {
        while (1) {
            changePID();
            }
}
Run Code Online (Sandbox Code Playgroud)

c fork kill

-2
推荐指数
1
解决办法
7343
查看次数

为什么这个fork()输出产生8而不是5?

所以我必须找到使用该fork()方法的代码的输出.我认为输出是5"你好",但我得到8.为什么?这是代码:

#include "csapp.h"

void doit()
{
    Fork();
    Fork();
    printf("hello\n");
    return;
}

int main()
{
    doit();
    printf("hello\n");
    exit(0);
}
Run Code Online (Sandbox Code Playgroud)

c linux fork

-2
推荐指数
2
解决办法
335
查看次数

使用forks = 0和forks == 0时有什么区别?

if(fork()=0)和之间有什么区别if(fork()==0)
当它返回0时,它是孩子,但如果它是== 0怎么办?

c fork

-3
推荐指数
1
解决办法
121
查看次数

Linux fork()命令

我写了一个程序

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

int main()
{
    int returnVal = fork();
    printf("Return Value: %i\n", returnVal);
    return 1;
}
Run Code Online (Sandbox Code Playgroud)

当我编译并运行时,我得到以下输出我只给出了一个printf语句然后为什么我看到2个打印.如果我删除了打印件,则不会打印任何内容.

alwin@alwin-desktop:~/Projects/Nix$ ./a.out 
Return Value: 5547
Return Value: 0
Run Code Online (Sandbox Code Playgroud)

c linux ubuntu printf fork

-3
推荐指数
3
解决办法
5976
查看次数

fork()返回0,但子进程getpid()!= 0.为什么?

这是测试fork()系统调用的C代码:

#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<unistd.h>
#include<wait.h>

int main(int argc, char *argv[])
{

    printf("I am: %d\n", (int)getpid());

    pid_t pid = fork();

    printf("fork returned: %d\n", (int)pid);

    if (pid < 0)
    {
        perror("fork failed");  
    }

    if (pid==0)
    {
        printf("I am the child with pid %d\n", (int)getpid());
        sleep(5);
        printf("Child exiting...\n");
        exit(0);
    }

    printf("I am the parent with pid %d, waiting for the child\n", (int)getpid());
    wait(NULL);
    printf("Parent ending. \n");

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

终端输出是:

I am: 25110
fork returned: 25111
I am the parent with pid …
Run Code Online (Sandbox Code Playgroud)

c fork pid process wait

-3
推荐指数
1
解决办法
2437
查看次数

您是否认为Firefox项目应该分为开发人员目标版本?

我刚才有这样的想法,需要一个分叉版本的Firefox,它将提供开箱即用的Web开发工具.像FireBug,YSlow,FireCookie,LiveHTTPHeaders等.

也许fork应该只包含那些扩展,或者采取进一步措施并在现有的chrome中实现它们.

我正在考虑的原因是,现在我有两个Firefox配置文件.一个"浏览",只有一个扩展和一个"开发",有很多很多的扩展.显然优点是前者比后者快.也许如果从一开始就瞄准开发人员,分叉版本会带来一些速度改进和其他细节.

你怎么看?有志愿者吗?

firefox open-source fork firefox-addon

-5
推荐指数
1
解决办法
259
查看次数

绘制以下程序的进程树

我必须为这段代码绘制进程树:

int main ()
{
    int i;
    for(i = 0; i < 3; i++)
        if(fork() > 0) 
            fork();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c operating-system fork

-6
推荐指数
1
解决办法
1677
查看次数

为什么`fork()`调用没有在无限循环中优化掉?

考虑到

C++11§1.10/ 24(在[intro.multithread]中)

"实现可以假设任何线程最终将执行以下操作之一:
- 终止,
- 调用库I/O函数,
- 访问或修改易失性对象,或
- 执行同步操作或原子操作.
[注意:这是为了允许编译器转换,例如删除空循环,即使无法证明终止也是如此. - 尾注]

...是允许编译器优化掉以下循环的编译器:

int main(int argc, char* argv[]) {
    while ( true )
        fork();
}
Run Code Online (Sandbox Code Playgroud)

(有一些早期的讨论在(优化掉一个"while(1);"在C++ 0x中),但它似乎没有回答fork循环中调用的情况.)

c++ posix fork c++11

-22
推荐指数
1
解决办法
1112
查看次数