fork 相关问题

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

在fork()代码中计算进程总数

我试图确定以下代码中生成了多少个进程: #包括 #包括 int main() { 整数 i = 1; if (fork()) //父进程...

回答 2 投票 0

如何获取子进程的完整返回值?

我需要捕获子进程的返回值.. 问题是:使用 waitpid() 函数我只能捕获返回值的 8 位 WEXITSTATUS(wstatus) 返回...

回答 3 投票 0

进程创建中的 fork 与 vfork

据我所知: 1-当调用vfork时,父进程等待直到子进程终止(但是当子进程调用exec时,将创建新的地址空间)。 2- vfork 在创建子进程时不使用写时复制。

回答 1 投票 0

根作曲家需要“...名称...”未找到

我将一个存储库分叉到我的 GitHub 帐户 (fiSCIENCES),但是当我执行“composer update”时,我得到: 正在加载包含包信息的作曲家存储库...

回答 1 投票 0

Linux 中的系统/用户时间和子系统/用户时间

基于APUE的示例8.31,假设以下代码。此示例显示进程的用户/系统时间以及每个命令的子进程的用户/系统时间(作为 argvs 传递) #包括 基于APUE的示例8.31,假设以下代码。此示例显示进程的用户/系统时间以及每个命令的子进程的用户/系统时间(作为 argvs 传递) #include <unistd.h> #include <stdlib.h> #include <stdio.h> #include <sys/times.h> void do_cmd(int, const char *); void pr_times(clock_t, clock_t, struct tms *, struct tms *); int main (int argc, char *argv[]) { long clktck = 0; clktck=sysconf(_SC_CLK_TCK); for (int i=1; i<argc; i++) do_cmd(clktck, argv[i]); exit (0); } void do_cmd(int clktck, const char *cmd) { struct tms tmsstart, tmsend; clock_t start, end; start=times(&tmsstart); system(cmd); end = times(&tmsend); printf("command:%s\n", cmd); pr_times(clktck, end-start, &tmsstart, &tmsend); printf("\n"); } void pr_times(clock_t clktck, clock_t real, struct tms *start, struct tms *end) { printf("real:%7.2f\n", real/(double)clktck); printf("user:%7.2f\n", (end->tms_utime - start->tms_utime) / (double)clktck); // this line printf("sys:%7.2f\n", (end->tms_stime - start->tms_stime) / (double)clktck); // and this line printf("cuser:%7.2f\n", (end->tms_cutime- start->tms_cutime)/ (double)clktck); printf("csys:%7.2f\n", (end->tms_cstime- start->tms_cstime)/ (double)clktck); } 我的问题是,通过这种命令执行方案,是否有可能使用户/系统时间大于零(以及如何)或者总是这两个值为零(因为作为分叉(子进程)执行)? 我执行如下程序 ./a.out "sleep 10" "find / -name a* 1>/dev/null 2>&1" 'bash -c "for ((i=0;i<1000000;i++)); do :; done;" ' 对于这种类型的命令执行,我认为用户时间和系统时间总是为零。因为它是作为子进程执行的

回答 1 投票 0

使用COW fork后当前堆栈页是否共享?

我了解 COW 机制会导致所有父页面和子页面指向相同的框架,并且它还包括堆栈。不过不知道现在的情况如何

回答 1 投票 0

为什么 fork 打印 10 次而不是 7 次,编译器是如何做到这一点的?

我有这个代码 #包括 #包括 #包括 int main(){ int pid = fork(); 叉(); 如果(pid==0) { 叉(); 叉(); ...

回答 1 投票 0

使用管道将数组从子进程传递到父进程

我正在尝试发送一个大数组,其中一半的值由子进程计算,另一半由父进程计算。我希望父进程获得

回答 1 投票 0

父进程在子进程之前完成,但仍然从管道打印出数据

我在管道()系统调用的手册页中重新创建了示例,但我有点困惑为什么当父进程似乎在子进程之前完成时会打印“Hello world”消息

回答 1 投票 0

为什么这个VForked装配会顺序发生?

我正在 WSL 上运行 NASM x86_64 位程序集。我本来期望 syscall_vfork 并行执行进程,但它只是运行子进程,然后运行父进程。 位 64 默认相对值 %包括“str...

回答 1 投票 0

为什么这个分叉装配会依次发生?

我正在 WSL 上运行 NASM x86_64 位程序集。我本来期望 syscall_vfork 并行执行进程,但它只是运行父进程,然后运行子进程。 位 64 默认相对值 %包括“str...

回答 1 投票 0

为什么一个进程在fork时没有到达`exit(0)`?

我有以下程序,只是为了测试我是否理解分叉和共享内存。 总之,它创建共享内存,分叉,分叉,分叉,并在每个分叉中写入数据并退出。 #包括...

回答 1 投票 0

使用 sudo,为什么分离的子进程会在父进程死亡时终止?

我正在编写一个需要管理员权限的程序(更新程序)。在某些时候,我们需要启动另一个程序并让第一个程序结束。所以父进程创建一个 fork,从它的 c 中分离出来......

回答 1 投票 0

函数 fork() 是如何工作的,使得“父”进程创建另外 6 个进程?

在此代码片段中: #包括 int main(int argc, char **argv){ for(int i=0;i<2;i++){ printf("i: %d\n",i); if(fork() | fork()) { fork(); } } } the

回答 1 投票 0

我对 C 中的 fork() 函数有这个问题,我只是不知道它是如何工作的

在此代码片段中: #包括 int main(int argc, char **argv){ for(int i=0;i<2;i++){ printf("i: %d\n",i); if(fork() | fork()) { fork(); } } } the

回答 1 投票 0

在 C++ 中实现链式管道命令时,我无法在子进程中使用“dup2”将输入从管道重定向到 STDIN_FILENO

我想在shell中实现管道命令,例如ls |猫 |厕所。这是我的管道命令实现。 我使用管道来存储每个命令生成的结果。对于每个子进程,它: ...

回答 1 投票 0

exec()之后共享内存

如果子进程运行了 exec() 来加载另一个程序,我如何在父进程和子进程之间共享内存? 可以使用mmap吗? 到目前为止,父级和子级使用 mmap 正确共享内存,b...

回答 2 投票 0

使用fork(),如何让子进程总是先运行?

子进程和父进程是并行执行的,哪个先启动取决于操作系统调度。但是怎样才能让子进程总是在父进程之前启动呢? 这是我的问题的伪代码...

回答 7 投票 0

在C中的子进程中读取文件

所以基本上,我试图读取一个文件并查看是否有任何行与我创建的子进程中的给定字符串匹配。然后答案被传输到打印的父进程......

回答 2 投票 0

手动分叉时应该将什么推送到新的遥控器?

我需要将现有存储库分叉到新的远程。 应该将什么推送到新存储库? $ git Remote add 重新定位 http://new... $ git push --全部重新定位 $ git push --标签重新定位 ...

回答 1 投票 0

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