在父进程退出时杀死子进程

2023-12-24

我对 C 和编程非常陌生,需要一些帮助。在 linux(cygwin) 上的 c 中,我需要在退出时删除所有子进程。我看过其他类似的问题,但无法使其发挥作用。我试过了-

atexit(killzombies); //in parent process

void killzombies(void)
{
    printf("works");
    kill(0, SIGTERM);
    printf("works");
    if (waitpid(-1, SIGCHLD, WNOHANG) < 0)
         printf("works");
}

由于某种原因,“作品”甚至从未被打印过。我按 ctrl + c 退出。

我也尝试过-

prctl(PR_SET_PDEATHSIG, SIGHUP); //in child process
signal(SIGHUP, killMe);

void killMe()
{
    printf("works");
    exit(1);
}

但因为我使用的是 cygwin,当我#include <sys/prctl.h>,cygwin 说它找不到该文件或目录,并且我不知道要为其安装什么包。 另外,如果我的prctl()如果这个功能起作用的话,会杀死所有的僵尸吗?

我的程序是一个客户端服务器,我的服务器 forks() 来处理每个客户端。我想当服务器关闭时不会留下任何剩余的僵尸。


Your waitpid不提供通常的参数,我很惊讶它没有崩溃。原型是:

pid_t waitpid(pid_t pid, int *status, int options); 

第二个参数应该是pointer to an int,您正在提供一个int。 另请注意,您应该致电waitpid for each孩子,你只是为了一个而呼唤它。

atexit()仅当您正常退出时才会被调用。如果您通过 CTRL+C 退出,那么您需要从 SIGINT 上的处理程序调用您的函数。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在父进程退出时杀死子进程 的相关文章

随机推荐

  • WCF TLS 密码套件

    我需要指定用于传输级安全的密码套件 WCF 中的 wsHttpBinding 我首先无法确定 WCF 在 TLS 上默认使用哪种密码 更不用说设置它了 这个问题是由于大多数系统都是基于 Java 构建的环境中操作造成的 这显然允许以编程方式
  • 如何快速删除导航栏的边框?

    我一直在尝试删除 navigationBars 边框 但没有成功 我研究过 人们似乎告诉将shadowImage和BackgroundImage设置为零 但这在我的情况下不起作用 My code self navigationControl
  • 如何用C#删除xml元素?

    我是 XML 新手 在理解如何实现删除树中某些元素的解决方案时遇到问题 我已经寻找了一个解决方案并尝试了很多例子 但没有产生任何令我满意的东西 希望有人可以提供一些线索 可能真的很简单 但我错过了它 因为我刚刚开始使用 XML 示例 XML
  • IPC、域袜子、命名管道

    IPC 和 Unix 域套接字和命名管道有什么区别 我从各种书籍中得到了模糊的定义 但无法弄清楚应该在哪里使用哪个定义 两个进程相互通信的任何方式都可以被视为 IPC 的一种形式 例如 未命名管道 cat file txt grep foo
  • 错误:任务“:app:processDebugGoogleServices”执行失败。 > 请修复版本冲突

    将我的 google play 服务更新到版本 28 后 我收到此错误 我不确定为什么会发生这种情况 因为它之前工作正常 这是我的构建 gradle file apply plugin com android application app
  • C# ListView DragDrop 事件方法每次拖放执行两次

    该方法连续执行两次 并且没有明显的理由这样做 它发生在 VS2010 Express 4 0 和 VS2008 3 5 中 public GUI InitializeComponent this lvwFiles DragDrop new
  • 将 RandomAccessSlice 转换为 RandomAccessCollection

    当我们尝试从一个数组中检索一系列元素时Array 我们得到一个ArraySlice let array 1 3 5 2 let arraySlice array lt 2 elements up to index 1 1 3 我们可以把它改
  • tox多次测试,重用tox环境

    是否可以使用单个 tox 虚拟环境执行以下操作 tox envlist test pylint flake8 mypy skipsdist true testenv lint deps pylint commands pylint test
  • 如何在android中使用.csv文件?

    我正在 Android 中做一个示例测验应用程序 我使用数组来存储问题和答案 现在我希望将问题和答案存储在 csv文件 是可以解析的 csv安卓中的文件 CSV 代表逗号分隔值 wiki 上可以找到很好的解释 CSV http en wik
  • 更改 Magento 产品页面上的文本“选择一个选项...”

    我创建了一个可配置的产品 它有三个选项 color size and style 现在在产品页面中 每个选项都有默认文本 选择一个选项 在下拉菜单中 但我希望文本应该是 选择颜色 选择大小 and 选择款式 我在 app code core
  • JSONDecodeError:需要 ',' 分隔符:第 1 行第 43 列(字符 42)

    我已经在这里读过很多例子了 不幸的是 我不断收到此错误 Error json decoder JSONDecodeError Expecting delimiter line 1 column 43 char 42 json 文件 peop
  • Puppeteer:无法启动浏览器进程!产卵

    当我尝试跑步时node app js 我收到错误 该消息是无法启动浏览器进程 产卵 Users iliebogdanbarbulescu Downloads firstProject node modules chromium lib ch
  • 文件系统树形视图

    我正在使用文件系统 并且我有一个文件对象的 List 这些文件对象将文件路径作为属性 基本上 我需要在 NET 中创建一个树视图 但我很难想出执行此操作的最佳方法 因为我需要从如下列表创建树结构 C WINDOWS Temp ErrorLo
  • 连接sql中的所有列值

    如何将从 sql 查询返回的不同行的所有列值合并为一个值 这是一个例子 查询返回 FOO RES1 RES2 RES3 现在我想要得到如下结果 FOOCONCAT RES1RES2RES3 有什么方法可以在sql中做到这一点吗 In SQL
  • 如何防止 MSI 错误:正在安装另一个程序?

    我编写了一个小 PowerShell 脚本 它调用不同的 MSI 文件来安装软件 有时我从 Windows Installer 中收到以下错误 正在安装另一个程序 请等待安装完成 然后再次尝试安装该软件 在调用 MSI 文件之前如何防止此错
  • 在 servlet 中从文件系统提供静态图像文件?

    如何通过 servlet 在文件系统中提供图像文件 看看这里 示例 Depot 在 Servlet 中返回图像 http www exampledepot com egs javax servlet GetImage html 链接已损坏
  • google-apps-script 用于编辑 Gmail 主题行

    问题是这样的 你可以搜索一下 发现很多人抱怨这个问题 假设您出售某种商品 例如经营一家在互联网上销售的小企业 并使用 PayPal 接受付款 PayPal 发送的每一条付款通知均具有完全相同的主题行 收到付款通知 因此 如果您收到 Bobb
  • KitKat版本之前的Android中如何获取短信应用程序(默认)的包名?

    Android KitKat版本之后 我们可以通过 Telephony sms getDefaultSmsPackage context 找到默认的短信包名称 但是如何获取 KitKat 版本之前的包名称呢 请参考这个http androi
  • 在线程之间划分奇数数量

    我刚刚学习 Java 中的线程 我想按字母顺序对单词列表进行排序 我的程序读取 txt 文件中的单词并将它们放入字符串数组中 用户可以自己选择要使用多少个线程 我想将数组分割成均匀 尽可能 的块 线程可以自行排序 所以我的问题是 如何在线程
  • 在父进程退出时杀死子进程

    我对 C 和编程非常陌生 需要一些帮助 在 linux cygwin 上的 c 中 我需要在退出时删除所有子进程 我看过其他类似的问题 但无法使其发挥作用 我试过了 atexit killzombies in parent process