标签: fork

如何杀死shell的所有子进程?

我正在写一个bash脚本,它做了几件事.

最初它启动了几个监视器脚本,每个脚本都运行一些其他工具.

在我的主脚本结束时,我想杀死从我的shell中生成的所有东西.

所以,它可能看起来像这样:

#!/bin/bash

some_monitor1.sh &
some_monitor2.sh &
some_monitor3.sh &

do_some_work
...

kill_subprocesses
Run Code Online (Sandbox Code Playgroud)

问题是这些监视器中的大多数都会生成自己的子进程,所以这样做(例如):killall some_monitor1.sh并不总是有用.

还有其他办法可以处理这种情况吗?

bash shell fork kill process

37
推荐指数
6
解决办法
5万
查看次数

如何重新分配/版权分叉项目(GNU/GPL)?

长话短说,我们正在分发一款免费软件.代码是GNU/GPL许可证,我们尝试与原始开发人员合作,但没有成功.我们正在改进软件,添加了许多功能,不太可能将我们的代码合并到原始代码中.

我们希望使用新名称调用新项目,当然使用相同的许可证更改每个文件中的版权声明.

我知道GNU/GPL应该允许修改代码和重新分发,但这里有一些问题:

  1. 可以更改项目名称吗?(我猜是)
  2. 是可以添加我们的版权声明并删除原件或我们应该添加我们并保留原始版权声明?
  3. 我们必须在代码中留下对旧项目的引用?(在标题中,他要求提供他的项目/网站的参考,以防万一.我想这只是一个建议,我们不能这样做,对吧?)

licensing fork gpl

36
推荐指数
1
解决办法
1万
查看次数

调用 fork 时是否复制线程?

如果我有一个使用线程运行的程序并fork()在基于 unix 的系统上调用,线程是否被复制?我知道当前进程的虚拟内存以 1:1 的比例复制到生成的新进程中。我知道线程在进程的虚拟内存中有自己的堆栈。因此,至少也应该复制线程堆栈。但是,我不知道不驻留在虚拟内存中的线程是否还有其他内容,因此不会被复制。如果没有,这两个进程是共享线程还是独立的副本?

c unix multithreading fork process

35
推荐指数
2
解决办法
1445
查看次数

如何告诉valgrind memcheck forked进程?

我有一个流程x,我想检查泄漏valgrind.问题在于x运行y,y反过来运行z.我不能x独立运行因为yz设置环境x,例如环境变量,命令行开关,所需的文件x等.

  1. 有什么方法可以告诉我valgrind继续运行z但是要跟踪它找到的任何叉子并报告它们吗?
  2. 我有什么方法可以告诉你valgrind跟踪任何问题,但只报告名为的进程x吗?
  3. 有什么方法可以告诉我valgrind附加已经运行的进程,我可以用gdb做的方式吗?

我不知道这是否重要,但我在SuSE64 linux和valgrind-2.4.0下运行.

谢谢!

c c++ linux valgrind fork

33
推荐指数
1
解决办法
2万
查看次数

分享别人的github项目将其作为宝石发布的道德和礼仪是什么?

我正在做一些关于CultureGrid的业余时间编码.他们有一个SOLR API来访问1.2米的文化艺术品.我已经发布了一个gem来使用它们的服务,但我对使用Datamapper和SOLR适配器后端以更好的方式做到这一点有了一个很好的想法.

我刚刚在Github上发现了一个名为dm-solr-adapter的项目.它是2008年其他人工作的一个分支,使用它你必须克隆项目并运行一个rake任务来安装它(在heroku上使用不多,所以我必须提供它).不幸的是,这项任务现在被打破了,因为他们没有固定他们的宝石版本,Bones在版本2和3之间发生了很大的变化.

基本上 - 它需要一些重新编码才能让它成为一个宝石,如果我要这样做,我不妨自己释放它并按我所知的方式去做 - 使用珠宝商代替.

所以,当然我会删除所有作者,但我只是想知道这里的道德和礼仪是什么.我是否在gem中包含我的用户名,还是使用原始的gem名称?这可能会破坏其他人的安装,即使gem没有列在Rubygems.org上吗?我遵循他们的编号惯例吗?他们似乎选择了"1.0.0"并坚持下去,没有进一步的活动.或者我只是从版本0.1.0开始?

如果不这样做,我只是抓住我想要的东西,将它包含在我的新项目中并给出帽子提示?对于那些可能想要做同样事情的人来说,这听起来并不是很有用.

或者我可能会把我觉得有用的东西拿出来,制作一个叫做dm-solr-backend之类的全新宝石并从头开始?

哦,困境 - 你会做什么?

git fork rubygems github

33
推荐指数
2
解决办法
4605
查看次数

gnu/Linux上pthread和fork的区别

pthread和fork wrt linux在实现差异以及调度如何变化(它是否变化?)方面的基本区别是什么?

我在两个类似的程序上运行strace,一个使用pthreads而另一个使用fork,最后make clone()syscall都有不同的参数,所以我猜这两个在linux系统上基本相同,但是pthreads更容易处理在代码中.

有人可以给出深刻的解释吗?

编辑:另见相关问题

fork pthreads linux-kernel

33
推荐指数
3
解决办法
3万
查看次数

如何在GitHub中只使用我的分叉存储库的主分支中的最新提交来执行拉取请求

我在github上分叉了一个存储库.我做了一些修改并做了一个拉取请求.

现在我做了一些其他的更改并想要做一个新的pull请求,但在执行pull请求之前的预览屏幕上它也显示了旧的提交(已经接受的提交).

如何仅在我的分叉存储库的主分支中选择最新提交,以便我可以仅使用该提交执行拉取请求?

git branch fork github pull-request

33
推荐指数
1
解决办法
7140
查看次数

为什么fork()以它的方式工作

所以,我已经习惯了fork(),我知道它做了什么.作为初学者,我非常害怕它(我仍然不完全理解它).fork()你可以在网上找到的一般描述是,它复制当前进程并分配不同的PID,父PID和进程将有不同的地址空间.一切都很好,但是,鉴于这个功能描述,初学者会想知道"为什么这个功能如此重要......为什么我要复制我的过程?".所以我确实很奇怪,最终我发现你可以通过execve()家庭来调用当前流程中的其他流程.

我仍然不明白为什么你必须这样做?最合乎逻辑的是拥有一个可以调用的函数

create_process("executable_path+name",params..., more params); 
Run Code Online (Sandbox Code Playgroud)

这会生成一个新进程并在main()的开头运行它并返回新的PID.

困扰我的是fork/execve解决方案正在进行可能不需要的工作的感觉.如果我的进程使用大量内存怎么办?内核是否复制了我的页面表等.我确信它不会真正分配实际内存,除非我触及它.另外,如果我有线程会发生什么?在我看来,它太乱了.

几乎所有关于fork的描述,比如它只是复制进程并且新进程在fork()调用之后开始运行.这确实发生了什么,但为什么会这样发生?为什么fork/execve是产生新进程的唯一方法,以及从当前创建新进程的最常用的unix方法是什么?有没有其他更有效的方法来产生进程?**这不需要复制更多的内存.

这个帖子谈到同样的问题,但我发现它不太令人满意:

谢谢.

linux fork process

33
推荐指数
4
解决办法
7788
查看次数

任何人都可以在fork()之后解释关于'文件描述符'的简单描述吗?

在"Unix环境中的高级编程",第2版,作者:W.Richard Stevens.

第8.3节fork函数.

这是描述:

父和子共享相同的文件偏移量很重要.

考虑一个分叉孩子的过程,然后等待孩子完成.假设两个进程都写入标准输出作为其正常处理的一部分.如果父级的标准输出重定向(可能是shell),则当子级写入标准输出时,子级必须更新父级的文件偏移量.

[1.这是什么意思?例如,如果父项的std输出被重定向到'file1',那么子项写入后子项应该更新什么?parent的原始std输出偏移量或重定向输出(即file1)偏移量?不能晚了,对吧?

[2.更新是如何完成的?由子显式,由OS隐式地,由文件描述符本身?在fork之后,我认为父母和孩子走自己的路,并拥有自己的文件描述符COPY.那么孩子如何更新偏移到父方?]

在这种情况下,孩子可以在父母等待时写入标准输出; 在孩子完成后,父母可以继续写入标准输出,知道其输出将附加到孩子写的任何内容.如果父级和子级没有共享相同的文件偏移量,则此类交互将更难以完成,并且需要父级的显式操作.

如果父节点和子节点都写入相同的描述符,而没有任何形式的同步,例如让父节点等待子节点,则它们的输出将被混合(假设它是在fork之前打开的描述符).虽然这是可能的,但这不是正常的操作模式.

在fork之后处理描述符有两种正常情况.

  1. 父母等待孩子完成.在这种情况下,父级不需要对其描述符执行任何操作.当子进程终止时,子进程读取或写入的任何共享描述符将相应地更新其文件偏移量.

  2. 父母和孩子都有自己的方式.这里,在fork之后,父关闭它不需要的描述符,并且子进行相同的操作.这样,既不会干扰对方的开放描述符.网络服务器经常出现这种情况."

[3.当调用fork()时,我理解的是那个子得到了父有什么的COPY,在这种情况下是文件描述符,并做了它的事情.如果任何偏移更改为父和子共享的文件描述符,则只能因为描述符记住偏移本身.我对吗?]

对不起,我对这些概念不太了解.

有帮助吗?谢谢.

c unix fork file-descriptor

33
推荐指数
2
解决办法
3万
查看次数

在GitHub上分叉是什么意思?

经过一番探索,在我的理解中,它与贡献有关.

Fork意味着将存储库(正在分叉的存储库)的副本复制到我自己的github帐户中.如果我想分叉官方jQuery存储库,那么我将转到https://github.com/jquery/jquery并点击"Fork"按钮,GitHub将存储库(jquery)复制到我的帐户(http:// github.com/yegya).然后,我将在http://github.com/yegya/jquery上提供该存储库的复制版本

现在,我可以对我的存储库进行任何更改,然后将拉取请求发送到原始存储库(jQuery的存储库),要求jQuery团队将我的更改合并到其原始存储库中.

我是否理解得当,或者它意味着什么更多或其他什么?

fork github repository

33
推荐指数
2
解决办法
7120
查看次数