Как поддержать поведение по умолчанию ^ Z в программе узла, которая обнаруживает нажатия клавиш? - PullRequest
0 голосов
/ 23 мая 2018

Я создал программу node.js, которая получает ввод с помощью клавиши stdin, используя 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?

1 Ответ

0 голосов
/ 10 марта 2019

Этот ответ в 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...