如果终端已关闭(按下关闭按钮)并使用CTRL+C,则可以使用NodeJS和触发器closeHandler生成终端



你好

我的操作系统目前在Linux中,我的目标是.spawn()另一个终端,并使用命令tail -f app.log观察该终端的父进程输出,使用该命令运行得很好。。。

代码

const xec = spawn('gnome-terminal', ['-x', 'bash', '-c', '"tail -f app.log; exec bash"'], {
shell: true
});

但如果终端已经关闭,并且使用CTRL+C,即使使用这个,我也无法触发.spawn()。。。

代码

// Trigger when terminal is show
xec.stdout.on('end', () => {
console.log('stdout: End');
});
// Not response
xec.stdout.on('exit', () => {
console.log('stdout: Exit');
});
// Trigger when terminal is show
xec.stdout.on('close', () => {
console.log('stdout: Close');
});
// Not response
xec.on('close', () => {
console.log('xec: Close');
});
// Trigger when terminal is show
xec.on('exit', () => {
console.log('xec: Exit');
});

如果没有从OP问题中清除CTRL/C是发送到原始窗口还是发送到带跨度的窗口。表面上看,所描述的问题与CTLR/C发送到原始窗口(节点程序启动的地方(有关。

"CTRL/C"可以被捕获为全局进程对象上的信号事件。看见https://nodejs.org/api/process.html#process_signal_events

const process = require('process');
...
process.on('SIGINT', () => { console.log("INT")));

旁注:考虑在gnome命令行中添加"--wait"。它将允许节点从子进程获得正确的信号,并使exec.on事件能够工作。消除在exec.stdout 上放置事件的需要

const xec = spawn('gnome-terminal', ['--wait' '-e', 'tail -f app.log'], {
shell: true
});

我可以触发关闭按钮,也可以用CTRL+C来触发这个。。。

代码

const command = 'gnome-terminal --disable-factory -- /bin/bash -i -c "tail -f app.log; exec bash"'
const xec = exec(command, (err, out, derr) => {
console.log(`Error: ${err}`);
console.log(`Out: ${out}`);
console.log(`derr: ${derr}`);
});

我只是添加--disable-factory。此外,--disable-factory不支持更新的版本,但到目前为止,我使用的是v3.28.1,它仍然可以正常工作。也可以在这个博客上看到这个问题

相关内容

  • 没有找到相关文章

最新更新