Когда я запускаю
io.Process.start(
'~/google_cloud_datastore_dev_server/gcd-v1beta2-rev1-2.1.1/gcd.sh')
.then((process) {
new Future.delayed(new Duration(seconds: 10), () => process.kill());
});
С Process.start
я получаю два новых процесса (скрипт gcd.sh
и приложение Java, запущенное из gcd.sh
). process.kill()
убивает только gcs.sh
, но процесс Java продолжает работать.
До process.kill();
pstree 24010
gcd.sh───java─┬─java───22*[{java}]
└─20*[{java}]
После process.kill();
java─┬─java───21*[{java}]
└─20*[{java}]
Есть ли способ убить процесс и все его дочерние элементы (всю группу процессов) из Dart, не обращаясь к инструментам командной строки, таким как ps
или подобным?
Немного громоздко обрабатывать вывод команды через стандартный ввод запущенных процессов, а также сложно сделать работу кросс-платформенной при использовании команд оболочки для этой задачи.
Кажется связанным: http://dartbug.com/3637