Tôi đang sử dụng NSTask để thực hiện một loạt các lệnh chạy dài như vậy:Chấm dứt một NSTask và con của nó
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];
Điều này tạo ra một quy trình để vỏ, và một quá trình con cho bất cứ lệnh đang chạy ở thời gian (lệnh 1 hoặc lệnh 2). Nếu tôi giết nhiệm vụ với [self.task terminate]
nó chỉ giết chết quá trình cha mẹ. Có cách nào để xác định và giết bọn trẻ không?
Theo tài liệu chấm dứt, gửi SIGTERM tới các mục phụ. Bạn có chắc nhiệm vụ phụ của bạn có thể nghe SIGTERM không? –
Một giải pháp không liên quan đến trình bao sẽ là tạo NSTask cho mỗi quá trình. Nếu chúng có nghĩa là bị xích lại, (a) mã hiện tại của bạn sẽ không làm điều đó và (b) với hai NSTask, bạn có thể khởi chạy mã thứ hai từ 'terminationHandler' đầu tiên. –