używam NSTask wykonać szereg długich poleceń biegania tak:wypowiedzieć NSTask i jego dzieci
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];
Stwarza to proces powłoki, a proces potomny za cokolwiek polecenie porusza się czas (polecenie 1 lub polecenie 2). Jeśli zabiję zadanie z [self.task terminate]
, zabije tylko proces nadrzędny. Czy istnieje sposób identyfikacji i zabijania dzieci?
Zgodnie z dokumentacją zakończyć wysyłanie SIGTERM do podzadań. Jesteś pewien, że twoje podzadania mogą nasłuchiwać SIGTERM? –
Rozwiązaniem, które nie wymaga powłoki, byłoby utworzenie NSTask dla każdego procesu. Jeśli mają być powiązane, (a) twój aktualny kod tego nie zrobi i (b) z dwoma NSTaskami, możesz uruchomić drugi z 'terminationHandler' pierwszego. –