我创建了一个node.js程序,该程序使用stdin
每this获取setRawMode(true)
的按键输入。我已经这样做了^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通常的工作方式?
答案 0 :(得分:0)
This answer很有用。我们需要send a signal to our own process-特别是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);