import {spawn} from 'child_process'; let grist; function startGrist(newConfig={}) { // H/T https://stackoverflow.com/a/36995148/11352427 grist = spawn('./sandbox/run.sh', { stdio: ['inherit', 'inherit', 'inherit', 'ipc'], env: {...process.env, GRIST_RUNNING_UNDER_SUPERVISOR: true} }); grist.on('message', function(data) { if (data.action === 'restart') { console.log('Restarting Grist with new configuration'); // Note that we only set this event handler here, after we have // a new environment to reload with. Small chance of a race here // in case something else sends a SIGINT before we do it // ourselves further below. grist.on('exit', () => { grist = startGrist(data.newConfig); }); grist.kill('SIGINT'); } }); return grist; } startGrist();