gpt4 book ai didi

cocoa - 确保 Cocoa 中的子进程已死亡

转载 作者:行者123 更新时间:2023-12-03 16:05:30 28 4
gpt4 key购买 nike

我正在编写一个应用程序,该应用程序启动一个运行简单 Web 服务器的子进程。我正在使用 NSTask 并通过管道与其进行通信,一切看起来或多或少都很好。但是,如果我的程序崩溃,子进程将保持事件状态,并且下次启动应用程序时,旧子进程和新子进程之间会发生冲突。有什么方法可以确保子进程在所属应用程序终止时也终止吗?

最佳答案

以上都不起作用......甚至launchd也不起作用总而言之,其记录的复杂性有办法处理这种常见情况。我不知道为什么苹果不只是采用“母舰批准”的方式来运行后台进程,但无论如何......我的解决方案是......

  1. 通过 NSTask 启动 shell 脚本并向其传递您需要的任何变量。 同时通过 int masterPID = [[NSProcessInfo processInfo] processIdentifier]; 传递您的父进程的 PID等。通过 $1、$2 等在脚本中读取这些内容。

  2. 反过来,从脚本内部启动子流程..

  3. 监控脚本中的子进程父进程。

这有双重目的..它使你能够“留意 children ..”,并且在 parent 被杀(或可怕的车祸)的悲伤事件中 - 杀死僵尸孤儿 。然后,您自己扣动扳机(您是 shell 脚本),您的进程表将变得干净......就好像您从未存在过。没有阻塞的端口,重新启动时没有冲突,没有应用程序商店拒绝。让我知道这是否有帮助!

更新:我制作了一个 Xcode 模板/守护进程/项目/任何可以实现这一点的东西。看看吧.. mralexgray / Infanticide.

关于cocoa - 确保 Cocoa 中的子进程已死亡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1295996/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com