进程的概念
- 进程是一个实体,每个进程都有自己的地址空间
- 进程是一个执行中的程序,存在嵌套关系
在macos系统中, 在命令行输入ps -ef
, pid表示当前进程id, ppid表示当前进程的父进程id,而操作系统的桌面起始进程/sbin/launchd
的的pid是1,ppid是0
可以根据ps -ef|grep node
筛选属于node的进程
child_process用法
异步
exec用法
1 2 3 4 5 6 7 8
| const cp = require('child_process') const path = require('path');
cp.exec('ls -al|grep node_modules', function (err, stdout, stderr) { console.log(err); console.log(stdout); console.log(stderr); })
|
execFile用法
第一个参数是可执行文件的路径,第二个参数执行参数,第三个是回调函数
1 2 3 4 5 6 7 8 9 10 11 12 13
| cp.execFile('ls', ['-al'], function (err, stdout, stderr) { console.log(err); console.log(stdout); console.log(stderr); })
cp.execFile(path.resolve(__dirname, 'test.shell'), ['-al'], function (err, stdout, stderr) { console.log(err); console.log(stdout); console.log(stderr); })
|
spawn的用法
简单的shell脚本
1 2 3
| ls -al|grep node_modules
echo $1
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
|
const child = cp.spawn(path.resolve(__dirname, 'test.shell'), ['-al', '-bl'], { cwd: path.resolve('./'), stdio: 'inherit', })
console.log(child.pid);
child.stdout.on('data', function (chunk) { console.log('stdout', chunk.toString()); })
child.stderr.on('data', function (chunk) { console.log('stderr', chunk.toString()); })
cp.exec(path.resolve(__dirname, 'test.shell'), { cwd: path.resolve('./') }, function (chunk) { console.log(chunk); })
|
folk的用法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
|
const child2 = cp.fork(path.resolve(__dirname, 'child.js'))
child2.send('hello child process', function (err) { })
child2.on('message', function (msg) { console.log(msg); }) console.log('main process pid:' + process.pid)
console.log('child process') console.log('child process pid: ' + process.pid)
process.on('message', function (msg) { console.log(msg);
})
process.send('hello main process', () => { process.disconnect(); })
|