gpt4 book ai didi

cocoa - 终止 NSTask 及其子任务

转载 作者:行者123 更新时间:2023-12-03 16:11:17 29 4
gpt4 key购买 nike

我正在使用 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] 终止任务,它只会终止父进程。有没有办法也能识别并杀死 child ?

最佳答案

这并不优雅,但您可以让 sh 将子任务作为后台进程启动,然后使用 shell 变量 $! 按照 here 将其 PID 写入文件,阻塞直到每个后台进程完成以保持异步性:

commandToRun = @"command1 & echo $! > /tmp/childpid; wait $!; command2 & echo $! > /tmp/childpid; wait $!";

然后,当您调用[self.task终止]时,您还应该调用:

system("kill -9 `cat /tmp/childpid`");
...或等效的东西。

关于cocoa - 终止 NSTask 及其子任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20521814/

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