В моем проекте мне нужно создать дочерний процесс и общаться с ним через IPC, в то же время этот дочерний процесс должен работать как root. Поэтому я использую cp.spawn('sudo', ...)
с каналом IPC, но обнаружил, что метод process.send
— это undefined
.
Вот код:
файл: parent.js
'use strict'
const cp = require('child_process')
const path = require('path')
const script = path.join(__dirname, 'child.js')
let child = cp.spawn('sudo', [process.execPath, script], {
stdio: ['inherit', 'inherit', 'inherit', 'ipc']
})
child.on('message', msg => {
console.log('message> ', msg)
})
console.log('parent> parent run!')
файл: child.js
'use strict'
console.log('child> child run!')
process.send('hahaha')
выполнить node parent.js
parent> parent run!
Password:
child> child run!
/Users/zoujie.wzj/workbench/child.js:5
process.send('hahaha')
^
TypeError: process.send is not a function
at Object.<anonymous> (/Users/zoujie.wzj/workbench/child.js:5:9)
at Module._compile (module.js:570:32)
at Object.Module._extensions..js (module.js:579:10)
at Module.load (module.js:487:32)
at tryModuleLoad (module.js:446:12)
at Function.Module._load (module.js:438:3)
at Module.runMain (module.js:604:10)
at run (bootstrap_node.js:394:7)
at startup (bootstrap_node.js:149:9)
at bootstrap_node.js:509:3
Обновление: после замены cp.spawn('sudo', ...)
на cp.spawn(process.execPath, ...)
программа заработает:
parent> parent run!
child> child run!
message> hahaha
Кто-нибудь знает, почему IPC не работает с sudo?