5
我使用NSTask來執行,像這樣一系列的長時間運行命令:終止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];
這爲外殼創建一個進程,並取其命令在運行一個子進程時間(命令1或命令2)。如果我用[self.task terminate]
殺死任務,它只會殺死父進程。有沒有辦法識別和殺死孩子呢?
根據文檔終止發送SIGTERM到子任務。你確定你的子任務可以聽SIGTERM嗎? –
不涉及shell的解決方案是爲每個進程創建一個NSTask。如果它們是被鏈接的,(a)你當前的代碼不會這樣做,(b)有兩個NSTasks,你可以從第一個的'terminateHandler'啓動第二個。 –