nodejs / node

Node.js JavaScript runtime ✨🐢🚀✨

Home Page:https://nodejs.org

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

windowsHide:true prevents SIGINT on child processes

jabrown85 opened this issue · comments

  • Version: v12.10.0
  • Platform: Windows 10 x64
  • Subsystem:

Example code:

const fs = require('fs')
const { spawn } = require('child_process')

const CODE = `
    const fs = require('fs')
    process.on('SIGINT', () => {
        fs.appendFile('output.log', 'SIGINT Child\\n', () => {})
        server.close()
    })

    fs.appendFile('output.log', 'Started Child\\n', () => {})

    const http = require('http')
    const server = http.createServer()
    server.listen()
`
fs.appendFile('output.log', 'Started Parent\n', () => {})
spawn(process.execPath, ['-e', CODE], {
    windowsHide: true
})

Expected output.log after Ctrl+C in Command Prompt node main.js

Started Parent
Started Child
SIGINT Child

Actual:

Started Parent
Started Child

The SIGINT signal is never sent to the child processes. I don't see this documented in the windowsHide flag. Setting the value to false results in the expected signal being sent. I know windows doesn't really do signals this way, but it seems inconsistent.

^C handling is implemented through SetConsoleCtrlHandler(). As you can probably guess from the name, that function only works when there's an actual console.

Not a bug, in other words, but feel free to send a PR if you think the documentation can be improved.

I infer from the execa issue that you're not interested in documenting this so I'll go ahead and close out the issue. PR still welcome, of course.