杀死一个分叉的孩子(Kill a Forked Child)
我正在调用fork来创建一个新进程。 我如何从父进程中删除它?
I am calling fork to create a new process. How can I kill it from the father process?
原文:https://stackoverflow.com/questions/8223022
更新时间:2022-12-04 18:12
相关问答
更多-
你的愿望是我的命令(至少,当你的愿望符合我的愿望时): 当你运行phantomjs ,你是用exec运行还是像普通进程一样运行? 如果你使用exec会有什么不同吗? 问题背后的想法是你杀死运行另一个进程的shell(在echo的情况下,它是shell),但这并不一定会杀死进程的子进程。 也许你需要使用类似的东西: kill -TERM -- -$p kill -- -$p 向进程组发送信号,而不仅仅是进程。 另外,考虑一个'超时'命令是否会让你的生活更轻松(在Linux上timeout )。 Your w ...
-
正如NSD所问,这实际上取决于它是如何产生的。 例如,如果您使用的是shell脚本,则可以使用nohup命令来运行子nohup 。 如果您使用的是fork/exec ,那么它会更复杂,但不会太多。 来自http://code.activestate.com/recipes/66012/ import sys, os def main(): """ A demo daemon main routine, write a datestamp to /tmp/daemon-log e ...
-
perldoc -f fork : 文件描述符(有时候锁定在这些描述符上)是共享的,而其他所有内容都被复制。 另请参阅perldoc perlipc 双向通信 。 更新:第二个想法,你想要这样的东西? #!/usr/bin/perl use strict; use warnings; my $pid = fork; die "Cannot fork: $!" unless defined $pid; if ($pid == 0) { print "Child start\n"; my ...
-
每个孩子都会获得自己的父进程内存副本(至少在它修改任何内容时)。 如果你需要在进程之间共享,你需要查看共享内存或一些类似的IPC机制。 顺便说一句,为什么你把这个社区维基 - 这可能会限制你的回应。 Each child gets its own copy of the parent processes memory (at least as soon as it trys to modify anything). If you need to share betweeen processes you ne ...
-
杀死一个分叉的孩子(Kill a Forked Child)[2022-12-04]
你可以用kill 。 pid从fork返回到父级。 You can use kill. The pid is returned to the parent from fork. -
实现此目的的一种方法是提供一些可以捕获的信号(不是SIGKILL )。 然后,安装一个信号处理程序,检测当前进程是否是父进程,如果它不是父进程,则调用_exit() 。 您可以使用SIGUSR1或SIGUSR2 ,也可以使用SIGQUIT 。 我在这里说明了这种技术。 可选地(如Lidong所建议的),父进程可以在发出kill()命令之前对信号使用SIG_IGN 。 signal(SIGQUIT, SIG_IGN); kill(-parent_pid, SIGQUIT); One way to accom ...
-
根据可用的可用内存控制分叉的子进程数(controlling how many child process forked based on available free memory)[2022-07-18]
根据COW的定义,这是不可能的。 您的进程可能没有明确分配内存,但它们肯定会隐式地执行。 当进程尝试修改标记为copy-on-write的页面时,操作系统需要暂停操作并分配新页面。 此分配可能会失败,并且程序中没有地方可以返回错误。 唯一可能的行动就是杀死这个过程。 您可以做的最好的事情是估计程序在峰值时需要多少内存,并将此信息与可用内存信息(例如来自/ proc / meminfo)结合起来。 完全禁用COW的根本解决方案也应该有效,但AFAIK Linux没有这个选项。 This is not poss ... -
Ruby Process.kill不能杀死ruby child中的system()(Ruby Process.kill can't kill system() in ruby child)[2022-05-01]
显然, system块。 请改用exec : http : //ruby-doc.org/core-2.2.0/Kernel.html#method-i-exec unless pid=fork puts pid exec("echo start ; sleep 1 ; echo 1 ; sleep 1 ; echo 2 ; sleep 1 ; echo 3") exit end puts "Child: #{pid}" sleep 1 Process.kil ... -
我正在尝试使用waitpid来保持父级的活着 你告诉waitpid马上回来。 将WNOHANG更改为0 。 I am trying to use waitpid to keep the parent alive You told waitpid to return immediately. Change WNOHANG to 0.
-
使用Doctrine为每个分叉子进程分隔DB连接(Separate DB connection for each forked child process using Doctrine)[2021-12-09]
经过一些研究,我自己想出了这个。 我上面的方法并不完全有效,而且比需要的更复杂。 要注意的主要事项是当子进入时数据库连接会发生什么。 由于大多数开发人员应该知道在分叉进程时,子进程会获得所有内容的副本,包括数据库连接等资源。 然而,棘手的部分是当一个分叉的孩子退出时它会关闭那些资源。 这意味着子将关闭它从父级共享的相同数据库连接。 当子进程退出时,父进程将立即建立无效的数据库连接,当您尝试在父进程中进行查询时,您将收到类似“Mysql服务器已消失”的错误。 避免此问题的一个解决方案是确保父项在分叉子项后始终 ...