Node.js 如何在检测按键的节点程序中支持默认^Z行为?

Node.js 如何在检测按键的节点程序中支持默认^Z行为?,node.js,command-line-interface,Node.js,Command Line Interface,我已经创建了一个node.js程序,通过使用setRawMode(true)从stdin获取按键输入。我已经把^C和^D(control-C/control-D)处理好了;代码基本上如下所示: process.stdin.setRawMode(true) process.stdin.on('data', data => { if (Buffer.from([0x03]).equals(data) || Buffer.from([0x04]).equals(data)) { pr

我已经创建了一个node.js程序,通过使用
setRawMode(true)
stdin
获取按键输入。我已经把
^C
^D
(control-C/control-D)处理好了;代码基本上如下所示:

process.stdin.setRawMode(true)
process.stdin.on('data', data => {
  if (Buffer.from([0x03]).equals(data) || Buffer.from([0x04]).equals(data)) {
    process.exit()
  }
})
很容易通过使程序退出来伪造
^C
^D
的工作方式。但是我怎样才能使
^Z
工作呢?显然,我不能假装,因为这是bash通常处理的事情。有没有什么方法可以告诉bash/sh/无论怎样,只要把程序放到后台,^Z通常的工作方式?

在Unix和Linux StackExchange上是有用的。我们需要——特别是
SIGTSTP

process.kill(process.pid, 'SIGTSTP');
在我的程序环境中,我还必须在发送
SIGTSTP
之前清除任何终端更改(例如隐藏光标,使用备用屏幕);我必须在收到
SIGCONT
后重新应用它们:

process.on('SIGCONT', () => {
  process.stdout.write(...);
});
我还发现,
process.stdin.setRawMode
需要刷新
SIGCONT
,原因如下:

process.stdin.setRawMode(false);
process.stdin.setRawMode(true);

作为参考,以下是我的diff实现: