-
Notifications
You must be signed in to change notification settings - Fork 178
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
How to notify a child process on SIGINT? #161
Comments
I got it working! The secret sauce was to start the child process with option "fork". This made it possible to send messages to it using When the main process realizes that the child process has been closed with code Here is my solution: monitor.js const path = require('path');
const forever = require('forever-monitor');
let child;
function exit(signal) {
console.error(`Received "${signal}" signal on main process.`);
if (child) {
child.send({action: 'close'});
}
}
['SIGINT', 'SIGKILL', 'SIGTERM'].forEach(signal => process.on(signal, () => exit(signal)));
process.on('exit', (code) => console.log(`Stopped main process with code "${code}".`));
const options = {fork: true};
child = new forever.Monitor(path.join(__dirname, 'server.js'), options);
child.on('exit:code', (code) => {
if (code === 1337) {
if (child) {
child.stop();
console.log('Successfully stopped child process.');
}
console.log('Stopping main process ...');
process.exit(0);
}
});
child.start(); server.js const express = require('express');
const app = express();
const port = process.env.PORT || 8080;
let server;
if (process.send) {
process.on('message', function (message) {
console.log(`Received "${message.action}" message from main process.`);
if (message.action === 'close') {
stopServer();
}
});
}
function stopServer() {
if (server) {
console.log('Stopping server in child process ...');
server.close(() => {
console.log('Stopped server in child process.');
process.exit(1337);
});
}
}
app.get('/', (request, response) => response.send('Hello'));
server = app.listen(port, () => console.log(`Server is running on port "${port}".`)); |
I am using "forever-monitor" on Windows where child processes are detached by default.
In my application I have a
monitor.js
file which monitors aserver.js
file and I want to be able to notifyserver.js
when I close my application by exitingmonitor.js
(hittingCtrl + C
in the terminal).Here is my demo code:
monitor.js
server.js
How can I call
stopServer
inserver.js
whenmonitor.js
receives aSIGINT
?The text was updated successfully, but these errors were encountered: