fork 相关问题

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

fork() 系统调用异常执行

我刚刚学习如何在 C 中使用 fork(),但我很难理解执行流程。 代码: #包括 #包括 #包括 诠释主要(){ p...

回答 1 投票 0

C中子进程kill掉后为什么会泄漏内存?

我需要在 (if) 块的末尾终止子进程。但是杀死它会导致内存泄漏 在 ubuntu 终端上试过。 编译:gcc -W -Wall -Wextra mallocFork.c 运行:valgrind ./a.out #

回答 1 投票 0

自定义 shell 多个管道成功,但没有输出到标准输出

我正在创建一个自定义外壳,目前正在努力让多个管道工作。例如,ls -al | wc -l 返回当前目录中所有文件目录的数量。我正在密切关注...

回答 2 投票 0

NodeJS 派生的 Python 进程 - Python 的 process.send() 的替代方案?

我正在用 NodeJS 分叉一个 Python 脚本,当分叉时,默认情况下,NodeJS 会在这个新进程和父进程之间创建一个 IPC。 使用 NodeJS,要将消息从孩子发送到父母,我会处理...

回答 2 投票 0

如何在 powershell 中使用 azure-devops-service-api 创建跨叉的 pr

我想将源代码仓库主服务器中的签到同步到分叉仓库主服务器 我试图创建从源回购主分支到分叉回购主分支的 PR(这是用 Python 完成的解决方案)。小...

回答 0 投票 0

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

不明白我需要使用哪个逻辑来打开问题。我没有我需要的等级制度。 #包括 #包括 #包括 //原型 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

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