gpt4 book ai didi

c - 代码解释 - fork, wait, execv

转载 作者:太空宇宙 更新时间:2023-11-04 08:44:27 25 4
gpt4 key购买 nike

我试图理解以下代码的作用:

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

int main(void) {
int pid;

for(;;) {
pid = fork();
printf(getpid());

if(pid == -1) {
printf("fork failed");
exit(1);
}

if(pid == 0) {
execv("MYFORKAPP", NULL);
exit(2);
}

wait();
}
return 0;
}

程序本身称为 MYFORKAPP。我正在学习这 3 个函数,我在互联网上看到这段代码,但我不明白它的作用。

我尝试运行它 (Fedora GCC),但终端是空的。

它至少应该打印第一个 getpid() 吗?

你能解释一下这段代码吗?

最佳答案

printf(getpid());

这可能会使程序崩溃。 printf() 期望它的第一个参数是一个字符串,但是 getpid() 将返回一个整数,所以这个整数将用作指向字符数组的指针,这很可能导致崩溃,即段错误。

除此之外,这个程序的作用是

  1. fork() 一个子进程和 wait()
  2. 这个子进程会再次执行同一个程序
  3. 所以它将fork()wait()
  4. 依此类推,直到您的系统没有足够的资源来创建新进程
  5. 然后fork()会失败,这些不同级别的子进程会一一退出
  6. 最后,您的 shell 创建的第一个进程将退出,程序结束。

关于c - 代码解释 - fork, wait, execv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22241689/

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