确保Cocoa中的子进程已经死了

Fra*_*y I 9 cocoa nstask

我正在编写一个启动运行简单Web服务器的子进程的应用程序.我正在使用NSTask并使用管道与它进行通信,而且一切似乎都或多或少.但是,如果我的程序崩溃,子进程将保持活动状态,下次启动应用程序时,旧的子进程与新进程之间会发生冲突.有没有办法确保当拥有的应用程序死亡时子进程死亡?

Avi*_*Dov 1

您的应用程序委托可以实现

- (void)applicationWillTerminate:(NSNotification *)aNotification
Run Code Online (Sandbox Code Playgroud)

消息,并在那里终止 NSTask。但是,不能保证在崩溃期间会调用该委托。

您还可以采取两个额外步骤:

  • 通过在创建时将子进程的 PID 写入磁盘并在正常关闭期间将其删除(有时不是最安全的行为),在启动新父进程期间关闭现有的孤立子进程。
  • 如果 NSPipe 的端点在特定时间(类似于心跳)内没有发送数据,则关闭子进程。