【发布时间】:2013-12-29 14:00:59
【问题描述】:
我正在使用 NSTask 执行一系列长时间运行的命令,如下所示:
commandToRun = @"command 1;command2";
NSArray *arguments = [NSArray arrayWithObjects:
@"-c",
commandToRun,
nil];
self.task = [[NSTask alloc] init];
[self.task setLaunchPath: @"/bin/sh"];
[self.task setArguments: arguments];
[self.task launch];
这将为 shell 创建一个进程,并为当时正在运行的任何命令(命令 1 或命令 2)创建一个子进程。如果我用[self.task terminate] 终止任务,它只会终止父进程。有没有办法识别和杀死孩子呢?
【问题讨论】:
-
根据文档终止将 SIGTERM 发送到子任务。你确定你的子任务可以监听 SIGTERM 吗?
-
不涉及 shell 的解决方案是为每个进程创建一个 NSTask。如果它们打算被链接,(a)您当前的代码不会这样做,并且(b)使用两个 NSTask,您可以从第一个的
terminationHandler启动第二个。