Questions tagged «fork»

6
流程后代
我正在尝试建立一个过程容器。该容器将触发其他程序。例如-一个bash脚本,它以'&'用法启动正在运行的后台任务。 我所追求的重要功能是:杀死容器时,应该杀死所有在其下产生的东西。不仅是直系子女,还有他们的后代。 当我开始这个项目时,我错误地认为,当您杀死一个进程时,它的孩子也会被自动杀死。我已经从有同样错误想法的人那里寻求建议。尽管可以捕捉到信号并将杀人事件传递给孩子,但这并不是我在这里寻找的东西。 我相信我想要实现的目标,因为当您关闭xterm时,其中运行的所有内容都会被杀死,除非未进行任何操作。这包括孤立的过程。那就是我想要重新创建的东西。 我有一个想法,就是我所寻找的是unix会话。 如果有一种可靠的方法来标识一个进程的所有后代,那么也能够向他们发送任意信号将很有用。例如SIGUSR1。

4
如何将密码传递给子进程?
已知在命令行上(从我的程序启动的子进程中)传递密码是不安全的(因为即使使用ps命令的其他用户也可以看到密码)。可以将其作为环境变量传递吗? 我还能通过什么?(除了环境变量),最简单的解决方案似乎是使用管道,但是这种最简单的解决方案并不容易。 我在Perl中编程。

4
fork和exec如何工作?
我没有太多的经验,只是试图参与到流程中,它们如何从用户级别解释为硬件。 因此,当从外壳启动命令时fork(),它将继承该命令的子进程并将exec()该子进程加载到内存中并执行。 如果子流程包含父流程(原始流程)的所有属性,那么该子流程有什么需求?原始进程也可能已加载到内存中。 这fork和exec概念适用于UNIX中的所有可执行程序吗?是否也喜欢用于shell脚本或仅用于命令?它也适用于shell内置命令吗? 如果我将执行命令/脚本,何时使用写时复制概念? 抱歉一次问很多问题,但是当我想到任何命令执行时,所有这些问题立刻浮现在脑海。
17 fork  exec 

1
为什么这些bash fork炸弹的工作方式不同,&在其中的意义是什么?
我知道普通的叉子炸弹是如何工作的,但是我真的不明白为什么在普通bash叉子炸弹的末尾需要&,以及为什么这些脚本的行为有所不同: :(){ (:) | (:) }; : 和 :(){ : | :& }; : 前者会导致CPU使用率激增,然后再将我带回到登录屏幕。后者反而只会导致我的系统死机,迫使我硬重启。这是为什么?两者都不断创建新流程,那么为什么系统的行为有所不同? 这两个脚本的行为也与 :(){ : | : }; : 即使我希望它们都一样,这也根本不会引起任何问题。bash手册页指出管道中的命令已经在子shell中执行,因此我被认为::应该已经足够了。我相信,应该在新的子Shell中运行管道,但是为什么会有如此大的变化? 编辑:使用htop并限制进程数量,我能够看到第一个变量创建了一个实际的进程树,第二个变量创建了同一级别的所有进程,而最后一个变量似乎未创建任何进程完全没有 这使我更加困惑,但是也许可以有所帮助?

3
为什么应该将fork()设计为返回文件描述符?
在他的关于网页的自管绝招,丹·伯恩斯坦解释了竞争条件select()和信号,提供一个解决办法,并得出结论认为, 当然,正确的事情是fork()返回文件描述符,而不是进程ID。 他的意思是-能够select()在子进程上处理其状态更改,而不必使用信号处理程序来通知那些状态更改,这是否有意义?

1
典型的炮弹“叉子炸弹”到底如何称呼自己两次?
在询问了Askubuntu和许多其他Stack Exchange网站上著名的Fork Bomb问题之后,我不太明白每个人都在说什么,这很明显。 许多答案(最佳示例)都这样说: “ {:|: &}表示运行功能:并将其输出:再次发送到功能” 好吧,确切的输出是:什么?传递给对方的是:什么? 并且: 本质上,您正在创建一个函数,该函数每次调用都会调用两次,并且无法终止自身。 两次执行的精确度如何?在我看来,:直到第一个:完成执行之前,任何内容都不会传递给第二个,实际上这将永远不会结束。 在C例如, foo() { foo(); foo(); // never executed } 第二个foo()根本不执行,只是因为第一个foo()永远不会结束。 我在想,同样的逻辑也适用于:(){ :|: & };:和 :(){ : & };: 做与 :(){ :|: & };: 请帮助我理解逻辑。



5
如何完全分叉使用重定向的Shell命令
这些年来,我已经写了很多shell脚本(但是我当然不是系统管理员),总有一些问题引起我的麻烦:如何从Bash脚本中派生出免于后台挂断的shell命令? 例如,如果我有这个: command_which_takes_time input > output 我怎样才能“ nohup”并分叉呢? 以下内容似乎并没有满足我的要求: nohup command_which_takes_time input > output & 我要寻找的语法是什么,我不了解什么?
13 bash  scripting  nohup  fork 

2
fork()和vfork()有什么区别?
我想详细了解fork()和vfork()之间的区别。我无法完全消化手册页。 我还想澄清一下我的一位同事的评论:“ 在当前的Linux中,没有vfork(),即使您调用它,它也会在内部调用fork()。”

1
ksh93如何避免命令替换中的派生
给定 cmd='fun(){ echo "$@"; }; fun $(fun $(fun hi))' 炮弹往往需要制作两个叉子才能实现 strace-f(){ strace -f "$@" 2>&1; }; for sh in dash bash zsh ksh; do printf "$sh\t" ; strace-f $sh -c "$cmd" |grep -e clone -e fork -c; done 除了ksh英勇地使它不分叉一次: dash 2 bash 2 zsh 2 ksh 0 它是如何做到的? 编辑: 插入管道的情况如下: …

3
进程分叉时会复制其虚拟内存或常驻内存吗?
在Linux中制作新进程的标准方法是复制父进程的内存占用空间,并成为子进程的环境,直到execv被调用为止。 我们在谈论什么内存占用量,虚拟的(所需的过程)还是常驻的(实际使用的)? 动机:我的设备的交换空间有限,而应用程序在虚拟内存和驻留内存之间的差异却很大。由于内存不足,该应用程序无法派生,并希望查看尝试减小虚拟足迹大小是否有帮助。

4
为什么vfork或fork的子代调用_exit()而不是exit()?
从手册页vfork(): vfork()与fork()的不同之处在于,父级被挂起,直到子级对execve(2)或_exit(2)进行调用。子级与其父级(包括堆栈)共享所有内存,直到子级发出execve()为止。子级不得从当前函数返回或调用exit(),而可以调用_exit()。 为什么孩子应该使用an _exit()而不是简单地打电话exit()?我希望这对vfork()和都适用fork()。
12 c  system-calls  fork  exit 

2
文件描述符和派生
当孩子被分叉时,它会继承父对象的文件描述符,如果孩子关闭了文件描述符,将会发生什么?如果孩子开始写文件,那么在父母的末端文件将如何处理?谁来管理这些不一致,内核还是用户? 当进程调用该close函数以通过文件描述符关闭特定打开的文件时。在进程的文件表中,引用计数减一。但是由于父级和子级都持有同一个文件,因此引用计数为2,关闭后该引用计数减少为1。由于它不是零,因此该进程仍然可以继续使用文件而没有任何问题。 请参阅Terrence Chan UNIX系统编程,(Unix内核对Files的支持)。

4
什么时候自己调用fork()和exec()?
我正在学习fork()和exec()命令。似乎fork()和exec()通常一起调用。(fork()创建一个新的子进程,而exec()用一个新的子进程替换当前的进程映像。)但是,在什么情况下,您可以单独调用每个函数?有这样的场景吗?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.