如果该终端已关闭(按下关闭按钮)并使用 CTRL+C,则可以使用 NodeJS 生成终端并触发 closeHandler
Is possible spawn terminal using NodeJS and trigger closeHandler if that terminal has been Closed (with press close button) and with CTRL+C
您好!
我的 OS 目前在 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 是发送给原始 window 还是发送给 spanwed window。从表面上看,描述的问题与 CTLR/C 发送到原始 window(节点程序启动的地方)有关。
'CTRL/C' 可以作为全局进程对象上的信号事件被捕获。参见 https://nodejs.org/api/process.html#process_signal_events
const process = require('process');
...
process.on('SIGINT', () => { console.log("INT")));
旁注:考虑将“--wait”添加到 gnome 命令行。它将允许节点从子进程获取正确的信号,并启用 xec.on 事件。消除将事件放在 xec.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
它仍然可以正常工作。看到这个 issue also this blog
您好!
我的 OS 目前在 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 是发送给原始 window 还是发送给 spanwed window。从表面上看,描述的问题与 CTLR/C 发送到原始 window(节点程序启动的地方)有关。
'CTRL/C' 可以作为全局进程对象上的信号事件被捕获。参见 https://nodejs.org/api/process.html#process_signal_events
const process = require('process');
...
process.on('SIGINT', () => { console.log("INT")));
旁注:考虑将“--wait”添加到 gnome 命令行。它将允许节点从子进程获取正确的信号,并启用 xec.on 事件。消除将事件放在 xec.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
它仍然可以正常工作。看到这个 issue also this blog