gpt4 book ai didi

dart - Dart Process.kill无效

转载 作者:行者123 更新时间:2023-12-03 03:38:42 25 4
gpt4 key购买 nike

我有以下代码启动webdev serve,等待它准备就绪,然后尝试杀死它。

import 'dart:async';
import 'dart:io';
import 'package:async/async.dart' show StreamGroup;

void main(List<String> arguments) async {

var stdout0 = StreamController<List<int>>();
var stdout1 = StreamController<List<int>>();
var stderr0 = StreamController<List<int>>();
var stderr1 = StreamController<List<int>>();

stdout.addStream(StreamGroup.merge([stdout0.stream, stdout1.stream]));
stderr.addStream(StreamGroup.merge([stderr0.stream, stderr1.stream]));

print('Starting webdev');
var webdev = await Process.start('webdev', ['serve', '--auto', 'refresh']);
stdout0.addStream(webdev.stdout);
stderr0.addStream(webdev.stderr);

// Wait for localhost:8080 to be accessible.
print('Waiting for webdev');

var timer = Timer(Duration(seconds: 20), () {});
for (;;) {
try {
Socket socket = await Socket.connect('127.0.0.1', 8080, timeout: Duration(seconds: 1));
socket.close();
break;
} catch (SocketException) {
}
if (!timer.isActive) {
throw Exception('Couldn\'t connect to 127.0.0.1:8080');
}
await Future.delayed(Duration(seconds: 1));
}

print('Killing webdev');
webdev.kill(ProcessSignal.sigkill);
}

但是 webdev.kill()似乎没有任何作用。我尝试了各种信号,但没有任何效果,并且每次也会返回 true。即使很奇怪,如果我在另一个终端上运行 kill -s TERM <pid>杀死进程,它也会死掉,但是我的Dart程序似乎没有意识到-至少它没有退出。这是怎么回事?

最佳答案

原来是a bug in Dart。基本上,问题在于webdev serve启动了一个实际执行服务的子进程。当您调用Process.kill()时,它只会杀死父进程,而子进程则保持运行状态。

顺便说一句,诊断此问题的好方法是运行htop -t,然后按F4筛选所需的进程。

关于dart - Dart Process.kill无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58875715/

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