首页 文章
  • -2 votes
     answers
     views

    fork():[保留]创建的子进程数

    #include <stdio.h> #include <sys/types.h> #include <unistd.h> int main() { int pid = fork(); for(int i=0;i<5;i++) { if(pid == 0) { fork(); p...
  • 1 votes
     answers
     views

    fork()和地址空间[暂停]

    如果调用执行子代码的函数会发生什么?父进程的地址空间被复制,但不能使用父进程的本地变量 . 我知道当使用fork()时,只有在子进程或父进程中进行写操作时才会复制地址空间,因此如果在父进程中进行了写操作,则子进程将获得父地址空间的副本 . 可以将子代码放在单独的函数中吗? void child(){ //do something } int main(int argc, char cons...
  • 4 votes
     answers
     views

    为什么在fork之后关闭文件描述符会影响子进程?

    我想通过按钮单击一个在linux中运行程序,因此我写了一个函数 execute : void execute(const char* program_call, const char* param ) { pid_t child = vfork(); if(child == 0) // child process { int child_pid = get...
  • 4 votes
     answers
     views

    C语言:如何通过IPC在父和子(分叉)进程之间共享一个结构(或者,如果不可能,一个数组)?

    过去两周我用Google搜索了这个,我没有得到任何答案 . 这就是我所拥有的: 父进程,它创建一个struct myStruct ,它基本上是一个使用指针的链表(如果这是一个主要问题,我可以接受使用固定大小的数组) . 使用 fork() 创建的固定数量的子进程需要对父进程创建的结构(或数组)进行读/写访问 . 我不知道怎么做才能使变量 myStruct 在进程之间共享 . 我尝试使...
  • 6 votes
     answers
     views

    使用Fork的递归Fibonacci(在C中)

    我正在尝试编写一个函数,该函数使用C中的forks从给定的int n递归计算得到的fibonacci数 . Here is the function specification: 如果打印属实,请打印 . 否则,将其提供给父进程 . 解决方案应该是递归的,它必须为每个调用分叉一个新的子节点 . 每个进程应该只调用一次doFib() . 方法签名无法更改 . 无法使用辅助函数 . 这是我到目前为止根...
  • 0 votes
     answers
     views

    关于COW在linux中分叉

    在linux中,我知道它是由COW实现的,因为浪费 . 但是,在书中说,当child在fork()之后调用exec()时,地址空间永远不会被复制 . 但我认为如果孩子使用exec(),则意味着在地址空间中创建尚未复制的新数据或代码 . 因此,当调用exec()时,会复制地址间隔(写入时复制),并在此处写入新数据或代码 . 我错了吗?为什么exec()调用永远不会复制父项的东西? 或者如果child...
  • 3 votes
     answers
     views

    子进程中运行的程序不循环

    我有一个关于从孩子那里阅读stdout的父进程的具体问题 . 我的问题是,当我运行程序时,子程序应该在循环中多次执行一个新程序,但它只运行一次并退出到父进程 . 子进程正在运行一个向stdout输出消息的简单程序 . 提前致谢 . #include <sys/types.h> #include <stdio.h> #include <string.h> #inc...
  • 5 votes
     answers
     views

    给定子PID,如何获得父PID

    我正在开发一个项目,我有一些PID,我必须找出哪些是僵尸进程,然后杀死他们的父进程,以杀死最初的僵尸进程 . 我不确定是否有任何方法可以找出给定PID的PPID是什么 . 任何帮助,将不胜感激 .
  • 21 votes
     answers
     views

    fork(应该是)在线程程序中对信号处理程序是否安全?

    我真的不确定POSIX在存在线程和信号时对 fork 的安全性的要求 . fork 被列为异步信号安全函数之一,但如果库代码有可能注册了非同步信号安全的 pthread_atfork 处理程序,这是否会否定 fork 的安全性?答案取决于运行信号处理程序的线程是否正在使用atfork处理程序所需的资源?或者换句话说,如果atfork处理程序使用同步资源(互斥体等),但是从一个永远不会访问这些资...
  • 4 votes
     answers
     views

    如何使用fork()创建一定数量的子进程

    我需要创建一定数量的并发子进程 . 我还希望每个子进程都修改一个全局变量,以便主父进程可以在其上一个修改版本中打印它 . 当我运行下面的程序时,'k'的最终值将为5,因此全局变量不会改变 . 如果我删除“exit(0)”部分,则全局变量会更改,但这次创建的子进程数会变大 . 使用fork(),我如何创建可以修改主父进程中的数据(全局变量,局部变量等)的X个子进程? int k = 5; // gl...
  • 6 votes
     answers
     views

    fork()子进程和父进程

    我正在尝试创建一个使用fork()来创建新进程的程序 . 示例输出应如下所示: 这是子进程 . 我的pid是733,我父母的id是772 .这是父进程 . 我的pid是772,我孩子的id是773 . 这就是我编写程序的方式: #include <stdio.h> #include <stdlib.h> int main() { printf("This...
  • 28 votes
     answers
     views

    fork之后调试子进程(跟随fork-mode子配置)

    我正在开发一个应用程序,父母要求孩子处理某些任务 . 我遇到了一个问题,我已经将gdb配置为follow-fork-mode子,但是在fork之后,在到达断点之后,它发送了一个SIGTRAP,但是孩子以某种方式终止并将SIGCHLD发送给父服务器 . 我在fork之前配置了 signal(SIGTRAP, SIG_IGN) 所以我的理解是,当达到断点但是它没有发生时,孩子应该继承并忽略SIGTRA...
  • -1 votes
     answers
     views

    分叉 - 儿童人数

    所以我有一个函数,它接受一个参数n,它是一个表示要分叉的子节点数的int,并将打印所有已经分叉的子节点的pid . 所以这个函数的目标是分叉n个孩子,每个孩子打印出它的pid . 我是新的分叉,不知道如何完成这样的任务 . 提前感谢您提供的任何帮助:) 这就是我现在所拥有的,它似乎正在起作用,但程序一旦完成就永远不会结束 . 我该怎么办 void print_child_pid(int n) { ...
  • 2 votes
     answers
     views

    为什么fork()在子进程中返回0?

    我们知道,fork()将返回两次,即两个PID . 子进程的PID在父进程中返回,并在子进程中返回0 . Why the 0 is returned in the child process? 任何特殊原因? UPDATE 我被告知链接列表在父进程和子进程之间使用,父进程知道子进程的PID,但是如果没有孙进程,那么子进程将得到0.我不知道它是否正确?
  • 1 votes
     answers
     views

    一个父进程的多个子进程

    我正在使用fork实现一个简单的父/子进程程序 . 我的目标是从单个父级创建用户输入数量的子进程,并将其PID存储在动态数组中 . 我设法使用fork创建子进程(我认为)并存储他们的PIDS . 但是,当我存储PID时,我还存储了0 PID以及我认为与进程相关的另一个PID,但这个数字比子进程和父进程大得多 . 为什么如果只在父进程内完成这种情况呢? void createProcesses(in...
  • -2 votes
     answers
     views

    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...
  • 2 votes
     answers
     views

    所有被空管阻塞的线程都读了

    我正在尝试自学C(Linux)中的多线程和多进程编程 . 我写了一个简短的程序,它生成一个新的线程,该程序进入一个例程,试图从空FIFO中进行阻塞读取,而主线程继续并打印到STDOUT . (注意:在执行程序之前,我确实在终端中使用 mkfifo newfifo 创建了一个FIFO) 我期待程序打印到屏幕“主线程”,然后在等待我将数据放入FIFO时阻塞 . 相反,整个过程被阻止,并且只有在我将数...
  • 0 votes
     answers
     views

    通过功能创建管道

    我想知道是否有人可以帮我修改我当前的代码.... 目前,它使用fork()创建我的进程,并获取指向执行该子代码块的函数的指针 . 我想玩管道并尝试让Process Y将其pid发送到Process X然后我想将它发送回Main ... 这是我目前所拥有的 #include <unistd.h> #include <stdio.h> #include <signal.h...
  • 18 votes
     answers
     views

    popen()可以像pipe()fork()一样制作双向管道吗?

    我正在C中的模拟文件系统上实现管道(主要是C) . 它需要在主机shell中运行命令,但在模拟文件系统上执行管道本身 . 我可以通过 pipe() , fork() 和 system() 系统调用来实现这一点,但我更喜欢使用 popen() (它处理创建管道,分支进程,并将命令传递给shell) . 这可能是不可能的,因为(我认为)我需要能够从管道的父进程写入,在子进程端读取,从子进程写回输出,最...
  • 0 votes
     answers
     views

    程序在使用管道进行分叉过程中崩溃

    我正在为课程作业编写一个基本的shell,它将在给定的路径列表中找到命令,并执行命令 . 它也意味着处理管道 . 但是,当我分叉子进程时,我在gdb中收到“Write error:Broken Pipe”消息,程序突然终止 . 我似乎无法理解为什么会发生这种情况,因为我对打开和关闭正确的管道一直持谨慎态度,并且工艺分叉似乎也能按预期工作 . 有更多C和unix编程经验的人可以帮我诊断问题吗?我的f...
  • 4 votes
     answers
     views

    令人困惑的叉系统调用

    我只是检查fork系统调用的行为,我发现它非常混乱 . 我在一个网站上看到了 Unix will make an exact copy of the parent's address space and give it to the child. Therefore, the parent and child processes have separate address spaces #incl...
  • 14 votes
     answers
     views

    Fork - 相同的内存地址?

    这是关于Linux中的C语言 . 我在 main() 中有 fork() ,我创建了2个子进程 . 然后,在两个子进程中运行函数 abc() ,其中有一个局部变量 x . 我在里面写了一些 Value . 然后我用 printf("%p",&x) 打印这个变量的地址 . 两个进程都打印SAME地址 . 我以为每个孩子都得到父母记忆的(独立)副本 . 我需要每个进程都...
  • 3 votes
     answers
     views

    fork()调用c

    我使用fork()创建了在2个不同地址空间上运行的2个不同进程 . 现在,在父进程中,我需要来自子地址空间的变量值,或者子进程是否可以修改父地址空间中的变量 . 这可能吗?
  • 1 votes
     answers
     views

    fork调用后的地址空间

    当进程执行fork()sys调用时,会从中生成子进程 . fork()调用之后的所有代码都被复制到内存的新物理页面,即帧 . 我无法可视化子进程的虚拟内存部分 . 因为在下面的代码中,char变量的地址在child和parent中是相同的 . #include <stdio.h> #include <sys/types.h> int main(void) { p...
  • 9 votes
     answers
     views

    fork()中的copy-on-write如何处理多个fork?

    根据维基百科(可能是错的) 发出fork()系统调用时,会创建与父进程对应的所有页面的副本,并由操作系统将其加载到子进程的单独内存位置 . 但在某些情况下不需要这样做 . 考虑一个子进行“exec”系统调用(用于执行C程序中的任何可执行文件)或fork()之后很快退出的情况 . 当需要子进程来执行父进程的命令时,不需要复制父进程的页面,因为exec用要执行的命令替换调用它的进程的地址空间 . 在...
  • 0 votes
     answers
     views

    如何在forked symfony bundle中修复composer.json

    我正在尝试安装 symfony-cmf/routing-auto 版本2.0.0-RC1,它需要 jms/metadata:1.5.* ,它在Symfony 2x下工作 . 我当前的项目适用于Symfony 3.3.x,这使得这个bundle无法安装,所以我在github上做了一个fork,更改了req . 到 jms/metadata:1.6.* 并添加了一行: "replace&qu...
  • 1 votes
     answers
     views

    如果我有一个进程,并且我克隆它,那么PID是否相同?

    只是一个简单的问题,如果我克隆一个进程,克隆进程的PID是一样的,是吗? fork()创建一个PID不同的子进程,但其他一切都是相同的 . Vfork()使用相同的PID创建子进程 . Exec用于将当前正在执行的进程更改为其他进程 . 我在所有这些陈述中都是正确的吗?
  • -2 votes
     answers
     views

    Unix - 管道,分支,execlp,dup2,c程序

    这是一项任务 . 我是unix编程的新手,可以使用一些帮助 . 我需要创建一个执行以下操作的C程序: In the main() function, it creates a pipe using the pipe() function, then creates two child processes with fork(). Child 1 redirects stdout to the wr...
  • 0 votes
     answers
     views

    通过管道传递变量,通过分叉进程执行Shell命令

    这是一种无关紧要的特殊情景 . 我想知道我在做什么错 . Scenario:1.分叉子进程2.子进程应执行shell命令(例如cat对文件进行排序)3 . shell命令的参数通过管道从父进程传递(例如,g . cat sort的文件输入) 我写了下面的程序,但它显示的是文件名,而不是打印出文件内容 . 但它挂起时没有给屏幕输出任何信息 #include <stdio.h> #incl...
  • 0 votes
     answers
     views

    如何使用fork和pipe以及c中的execvp将stdout重定向到stdin?

    我需要做自己的shell实现,但我无法正确实现管道 . 如果我有一个像 ls -l | grep toto 这样的命令,我需要将 ls -l 的输出(stdout)重定向到 grep toto 的输入(stdin) . 我还想在父进程中显示命令的结果而不是直接在子进程中调用execvp(这就是为什么我有2个分支) . 目前,使用以下代码,我创建一个子进程使用execvp执行命令,然后将结果写入变量...

热门问题