8

有没有办法在飞镖控制台应用程序 中捕获CTRL+ ?C

例如,按CTRL+C从服务器向 Web 套接字客户端发送干净的“关闭”数据包,而不是仅仅粗暴地关闭套接字。

4

2 回答 2

2

我已经进行了挖掘,我认为目前的答案是否定的。

您可以捕获标准输入,例如:

import 'dart:io';

void main() {
  stdin.onData = () => print(stdin.read());
}

但这不响应CTRL+ C

在其他地方,process.dartdart:io库的一部分)定义了各种信号,例如 SIGQUIT 和onExit()回调,但这用于控制子进程而不是主进程。

于 2013-01-18T10:18:15.560 回答
2

现在可以使用

我在 Unified Diff 找到了以下测试代码:tests/standalone/io/signals_test_script.dart

import "dart:io";

void main(args) {
  int usr1Count = int.parse(args[0]);
  int usr2Count = int.parse(args[1]);
  var sub1;
  var sub2;
  void check() {
    if (usr1Count < 0 || usr2Count < 0) exit(1);
    if (usr1Count == 0 && usr2Count == 0) {
      sub1.cancel();
      sub2.cancel();
    }
    print("ready");
  }
  sub1 = ProcessSignal.SIGUSR1.watch().listen((signal) {
    if (signal != ProcessSignal.SIGUSR1) exit(1);
    usr1Count--;
    check();
  });
  sub2 = ProcessSignal.SIGUSR2.watch().listen((signal) {
    if (signal != ProcessSignal.SIGUSR2) exit(1);
    usr2Count--;
    check();
  });
  check();
}

希望这将很快发布。

另请参阅如何在 Dart 中捕获当前的 SIGINT?

于 2015-09-01T09:51:18.320 回答