fork 相关问题

`fork()`函数是通过复制调用进程来创建新进程的Unix / Linux / POSIX方法。

从数组创建子进程不起作用

不明白我需要使用哪个逻辑来打开问题。我没有我需要的等级制度。 #包括 #包括 #包括 //原型 v...

回答 0 投票 0

父进程 kill() 子进程但随后不响应 read() 或 printf()?

当执行程序 a 的子进程收到信号 SIGTERM 时,它应该在终止之前输出到标准输出。但是我的 read() in (signal == 1) 正在运行?我没有从

回答 0 投票 0

C 中的自定义管道实现 - 无法获得正确的状态

我实现了一个用于执行多个管道的递归 void handlePipes(int pipeIndex, int IOIndex, int fdprev) { 字符 *commandArr[10]; breakCommand(commandArr, splitCommands[

回答 0 投票 0

重定向到文件时的不同输出

我有这个代码: int 主要(无效) { 诠释 f; 对于 (int i = 0; i < 2; i++) { fork(); printf("hello\n"); } wait(NULL); printf("hello\n"); ...

回答 1 投票 0

分叉减少函数执行时间

我得到了一个奇怪的观察。 基本上,我正在尝试测量执行长 for 循环的时间。这是我的 C 代码。 #包括 #包括 #包括 我得到了一个奇怪的观察。 基本上,我正在尝试测量执行长 for 循环的时间。这是我的 C 代码。 #include <stdio.h> #include <stdint.h> #include <unistd.h> #include <sys/types.h> #include <time.h> #include <sys/time.h> #include <sys/wait.h> #include <errno.h> #include <stdlib.h> #include <string.h> #define fatal(s, ...) do { printf("%d: errno = %s\n", __LINE__, strerror(errno)); printf(s, ##__VA_ARGS__); exit(-1);}while(0) #define ts(x) (gettimeofday(&x, NULL)) #define dt(t2, t1) ((t2.tv_sec - t1.tv_sec)*1000000 + (t2.tv_usec - t1.tv_usec)) struct timeval t1, t2;; #define FORK int main(int argc, char *argv[]) { volatile uint32_t d, v, i, j; pid_t pid; if(argc != 2) fatal("./main count\n"); sscanf(argv[1], "%u", &d); v = 1612 * d; printf("v= %u\n", v); #ifdef FORK if((pid = fork()) != 0) { // running in child or parent gives same result #endif ts(t1); for(j = 0; j < 1000; j++) for(i = 0; i < v; i++); ts(t2); printf("dt = %lu\n", dt(t2, t1)); #ifdef FORK } else { wait(NULL); } #endif return 0; } 现在,如果我在没有 fork 的情况下测量时间,我得到的时间比在 fork 之后运行相同的东西要长!无论我是在子级还是父级中运行 for 循环都没有关系。起初我以为墙上的时间可能是行为不端,但是我用秒表测量并且 for 循环分叉后实际上执行得更快 示例输出: $ ./main 100000 // without fork v= 161200000 dt = 95063417 $ ./main 100000 // with fork v= 161200000 dt = 82714821 我试过用 taskset 执行,它给出了相同的结果。在我的系统中,我也禁用了超线程,隔离了一个核心并将其频率固定为 2.8 GHz,我观察到同样的现象。我什至在虚拟机 (firecracker) 中运行了相同的实验。我观察到相同的结果(也有外部秒表)! 发生了什么(见鬼)?为什么我得到这样的结果? uname -a的输出 Linux csl 5.15.0-58-generic #64~20.04.1-Ubuntu SMP Fri Jan 6 16:42:31 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux lscpu的输出 Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian Address sizes: 48 bits physical, 48 bits virtual CPU(s): 16 On-line CPU(s) list: 0-15 Thread(s) per core: 1 Core(s) per socket: 16 Socket(s): 1 NUMA node(s): 1 Vendor ID: AuthenticAMD CPU family: 25 Model: 33 Model name: AMD Ryzen 9 5950X 16-Core Processor Stepping: 0 Frequency boost: disabled CPU MHz: 2200.000 CPU max MHz: 5083.3979 CPU min MHz: 2200.0000 BogoMIPS: 6787.45 Virtualization: AMD-V L1d cache: 512 KiB L1i cache: 512 KiB L2 cache: 8 MiB L3 cache: 64 MiB NUMA node0 CPU(s): 0-15

回答 0 投票 0

如何在不使用管道的情况下在父级中打印孙子的 PID?如何统计子进程和孙进程的数量?

编写一个 C 程序,使用系统调用 fork( ) 创建一个子进程。从子进程,显示 PID 和 PPID 然后再次调用 fork( ) 创建一个孙子并让他参与

回答 1 投票 0

进程之间的管道

我尝试编写一个程序,将一串字符转换为大写字母。父进程应该获取字符串并通过管道将其发送给子进程。然后...

回答 2 投票 0

在 Linux 上的 std::threads 中创建子进程

我有一个用 C++ 为 Windows 编写的程序,它是浏览器扩展的本机应用程序。基本上它通过 stdin 从浏览器接收消息并通过 std 发送回响应...

回答 0 投票 0

在 nanoc live 中用 spawn() 替换 fork()

我遇到了 Ruby 的问题。特别是 spawn() 和 fork() 方法。 我正在 Windows 上使用 Nanoc 开发一个网站,在尝试实现 nanoc-live gem 时,我得到的消息是 f...

回答 0 投票 0

由于分叉数为 -1,无法启动 GitHub 页面存储库?

我正在尝试使用 GitHub Pages 部署我的个人网站。但是,当我使用我的用户名创建存储库时; sudoyolo.github.io,存储库初始化为 -1 个 fork。 N...

回答 0 投票 0

分叉读取多个文件并将它们写入单个输出文件

我想从多个文件中读取并使用 fork() 将它们写入单个文件。我有 3 个子进程,每个子进程分别读取 3 个输入文件,我想将这些文件的内容写入

回答 1 投票 0

WSL 1 / 2 fork() 是写时复制吗?

最初,UNIX 必须为 fork 系统调用复制整个地址空间。现代 UNIX 使用写时复制技术,这避免了代价高昂的页面复制。 WSL 1 / 2 是否有有效的写入副本

回答 1 投票 0

Userfaultfd 不会收到分叉事件,除非之前完成注册

我正在创建一个程序,它使用 userfaultfd 来操作子进程的某些页面。我需要这个程序来监视所有子程序,所以我正在用 EVENT_FORK 监听分叉。然而,这

回答 0 投票 0

pid 为 50142 和 150142 的两个进程之间是否存在任何继承关系?

我正在使用一个工具并监控它的资源使用情况;我在某个时候用“top”命令得到了这个,这里的 pid 50142 和 150142 的第一个和第二个条目是我感兴趣的,

回答 0 投票 0

fork() 未按顺序运行进程 [关闭]

这段代码的意思是fork 4次,每次创建子进程时执行hello()程序,最后结束父main()进程。 我在这里拥有的是创建所有的子进程......

回答 1 投票 0

我正在尝试通过父子函数从管道写入和读取消息,但一直遇到“参数太少”的问题

所以我试图在 Unix 中编写一个程序,允许我使用管道将消息写入父函数并从子函数读取它,反之亦然。我得到了允许我

回答 0 投票 0

父母和孩子的地址可变但价值不同

最近学习了c++中fork()的作用。我遇到了 2 个问题,我找不到任何原因。 在这里,虽然我在孩子和父母中都得到了相同的地址...

回答 1 投票 0

如何为矩阵的每个元素创建新流程?

如何使用 fork() 函数创建一个包含进程的矩阵,每个进程都包含一个唯一的进程 ID (PID),然后打印该矩阵?我试图实现这段代码,但我得到了一个

回答 1 投票 0

具有分叉和共享内存的斐波那契数列生成器

我正在为作业问题而苦苦挣扎。我被要求: 编写一个程序,其主例程从用户那里获取一个参数 n (n<40), i.e. passed to your program when it was invoked from the sh...

回答 1 投票 0

fork() 后杀死子进程 PID 是否保证安全?

考虑以下情况: 我使用 fork() 从我的程序中创建一个子进程 父进程收到 PID 为 1234。 子进程然后调用 execve("myotherprogram");

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.