- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我的测试代码是
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
int main() {
int c = fork();
if (c == 0) while(1);
c = fork();
if (c == 0) while(1);
c = fork();
if (c == 0) while(1);
c = fork();
if (c == 0) while(1);
while(1);
}
所以我有一个 parent 和 4 个 child 。当我杀死 parent 时, children 在 init 作为 parent 的情况下工作正常。但是,如果我停止(使用 SIGSTOP)其中一个 child 然后杀死 parent , child 也会被杀死。为什么会这样?
最佳答案
显然,如果进程组中的一个进程停止,所有进程都会收到 SIGHUP 信号,然后在进程组领导者终止时发出 SIGCONT 信号。 SIGHUP 的默认处理程序终止进程。这是预期的行为,如记录在例如
http://www.win.tue.nl/~aeb/linux/lk/lk-10.html
来自上面的链接:
If termination of a process causes a process group to become orphaned, and some member is stopped, then all are sent first SIGHUP and then SIGCONT.
The idea is that perhaps the parent of the process group leader is a job control shell. (In the same session but a different process group.) As long as this parent is alive, it can handle the stopping and starting of members in the process group. When it dies, there may be nobody to continue stopped processes. Therefore, these stopped processes are sent SIGHUP, so that they die unless they catch or ignore it, and then SIGCONT to continue them.
编辑:
顺便说一句,strace 是一个很好的工具,可以用来查明这些事情的真相。如果您将 strace 附加到其中一个子进程,您将看到仅当其中一个子进程在父进程(即进程组领导)死亡时停止时才会发送 SIGHUP。
您需要使用例如更改 SIGHUP 的处理程序sigaction(2) 如果您希望子进程存活。
关于如果其中一个进程被 SIGSTOP 停止,则子进程在杀死父进程时死亡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4354885/
我使用适用于 Windows 的 QuickBooks。并且 Windows 应用程序调用我的后端,在某些库脚本中它调用 exit 或 die ...所以我无法捕获响应,需要检测退出运行的位置或在退出
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 4年前关闭。 Improve thi
我很无聊,只有 30 分钟的空闲时间,所以我决定尝试一下制作生活游戏。我在维基百科上遵循了该规则,但它似乎无法正常工作。有人可以告诉我我会做错什么吗? 规则如下: 任何少于两个活邻居的活细胞都会死亡,
我的社交网络上有一个简单的插入查询,允许用户在文本区域中输入文本并将其输出到他们的个人资料页面上。他们可以选择删除,并按预期将状态标记为“死亡”,并删除更新。问题是,如果他们只是输入一个新的内容,而不
这可能是一个硬件问题,因为我不确定后台 worker 是如何实现的,但问题是:我有 3 个后台 worker 运行不同的线程。我对这些线程进行了编码,以便在它们开始和结束时显示,但我得到了一些非常奇怪
我有一个简单的服务器: from multiprocessing import Pool, TimeoutError import time import os if __name__ == '__m
在这里,我尝试在线程终止后加入该线程,代码工作正常,但我的问题是它不应该抛出一些错误消息或任何信息吗? public class MultiThreadJoinTest implements Runn
我正在开发一个简单的 Android 项目,但遇到了可怕的致命异常,并且确实不知道如何确定我是否在 Android 世界中做一些越界的事情...... 我有这个代码: private OnClickL
我正在尝试编写一个程序,根据用户输入值“n”,我将 fork 那么多进程以同时运行。此外,每个 child 都试图执行我创建的另一个文件,这将生成 x sleep 时间和 x 退出值。最终,当 chi
我们知道,当系统资源耗尽时,后台 Activity 会序列化其状态并被操作系统杀死。当我们恢复它时,操作系统通过传递给 onCreate 方法的 savedInstanceState 恢复 Activ
我想这样做是为了测试我的代码。我想我可以围绕弱引用对象制作另一个包装器,但更愿意直接工作以模拟原始对象被回收。 这是我目前的代码 var myString = "someString"; var
我使用 GCM 在发布图片时收到通知,然后我下载并处理它: public class GcmBroadcastReceiver extends WakefulBroadcastReceiver {
我有一个带有中央事件机制的程序,该机制使用 select、epoll 或 kevent(平台依赖、OSX、Linux 和 FreeBSD)。 现在我有一个问题,我需要等待一个进程完成执行。我从这个过程
我有一个非常简单的函数,如下所示: public static boolean isAppInstalled(String packageName) { PackageManager pm =
我有一个接受图像复制/粘贴的 TinyMCE 表单。输入完评论后,按“发布”,它会提交表单,解析内容并显示在屏幕对话中。 我正在尝试使用 preg_match_all 从 POSTed 变量中提取 b
这是我在 vs 代码中的交互式窗口中运行代码时显示的错误消息: C:\Users\rohit\AppData\Roaming\Python\Python38\site-packages\traitle
在 Scala 中,当另一个(远程)actor 终止时,可以通过设置 trapExit 标志并使用第二个 actor 作为参数调用 link() 方法来通知一个 actor。在这种情况下,当远程参与者
我正在tpot上运行dask在gcp的kubernetes集群上运行,该集群是24核120 GB内存,带有4个kubernetes节点,我的kubernetes yaml是 apiVersion: v
几周来我一直在为这个问题苦苦挣扎。我对 Android 还很陌生,希望您能帮助我。 我有这个服务,它运行在与应用程序不同的线程上。本质上,用户指示它启动,并且它应该保持 Activity 状态,直到用
我正在编写一个插件,它从不和谐中获取消息并将其发送到我的世界服务器。Minecraft 客户端很难渲染表情符号。因此我选择使用https://github.com/kcthota/emoji4j将所有
我是一名优秀的程序员,十分优秀!