NodeJs簡明教程(8)

6153 ワード

NodeJs簡明教程はゼロからNodeJs関連の知識を学び、JS開発者を支援して全スタック開発技術スタックを構築します.
注意して、より多くのNodeJs を取得する.
本論文はNodeJs簡明教程の第8編で、NodeJs子プロセスモジュールに関する基本的な操作を紹介します.
ちどり_processモジュールは、デリバティブプロセスの能力を提供する(popen(3)と類似しているが、異なる方法で).
NodeJsのJSスレッドは単一スレッドであり、マルチコアCPUを利用することはできず、CPU密集型のタスクを実行することはできないが、プログレッシブプロセスの形式にIPC(プロセス間通信)を加えることで、マルチコアCPUを十分に利用することができる.
spawnspawnは、 を実行することができ、spawnの関数プロトタイプは以下の通りである.
child_process.spawn(command[,args][,options])
  • command 実行するコマンド
  • args からコマンドに送られたパラメータリスト
  • options

    • cwd サブルーチンworkdir
    • env
      const { spawn } = require('child_process');
      const ls = spawn('ls', ['-lh', '/usr']); //     
      
      ls.stdout.on('data', (data) => { //            
        console.log(`stdout: ${data}`);
      });
      
      ls.stderr.on('data', (data) => { //              
        console.log(`stderr: ${data}`);
      });
      
      ls.on('close', (code) => { //        
        console.log(`     ,      ${code}`);
      });

      ( )

      stdout: total 0
      drwxr-xr-x  970 root  wheel    30K  7 19 23:00 bin
      drwxr-xr-x  306 root  wheel   9.6K  7 12 22:35 lib
      drwxr-xr-x  249 root  wheel   7.8K  7 19 23:00 libexec
      drwxr-xr-x   15 root  wheel   480B  4  1 14:15 local
      drwxr-xr-x  239 root  wheel   7.5K  7 12 22:35 sbin
      drwxr-xr-x   46 root  wheel   1.4K  9 21  2018 share
      drwxr-xr-x    5 root  wheel   160B  9 21  2018 standalone
      
           ,      0

      exec

      exec を してもいいです.spawnとは い、 はコールバック によって、spawnはイベントを じて、execの のプロトタイプは の りです.

      exec(command[,options][,callback])
    • commmand が するコマンドであり、コマンドパラメータはスペース
    • を する.
    • options

      • cwd サブルーチンworkdir
      • env
      • timeout サブプロセス タイムアウト
      • calback フィードバック
      • error がエラーを する(サブルーチンのエラー ではない)
      • stdout サブルーチン
      • stder サブルーチン エラー
      • const exec = require('child_process').exec;
        
        exec('ls -lh /usr',function(err,stdout,stderr) {
            if(err) {
                console.log('    ', err);
            }
            console.log('stdout', stdout);
            console.log('stderr', stderr);
        });
        のルーチン
        stdout: total 0
        drwxr-xr-x  970 root  wheel    30K  7 19 23:00 bin
        drwxr-xr-x  306 root  wheel   9.6K  7 12 22:35 lib
        drwxr-xr-x  249 root  wheel   7.8K  7 19 23:00 libexec
        drwxr-xr-x   15 root  wheel   480B  4  1 14:15 local
        drwxr-xr-x  239 root  wheel   7.5K  7 12 22:35 sbin
        drwxr-xr-x   46 root  wheel   1.4K  9 21  2018 share
        drwxr-xr-x    5 root  wheel   160B  9 21  2018 standalone
        
             ,      0
        execFileexecFileexecと しているが、デフォルトではshellに することはなく、 に された ファイルfileは しいプロセスとして に され、execよりもやや になる.execと じオプションをサポートします.デリバティブshellがないため、 I/O .execFileプロトタイプ:
        execFile(file[,args][,options][,callback])
      • file が するコマンドまたは ファイルパス
      • args のパラメータリスト
      • options

        • cwd サブルーチンworkdir
        • env
        • timeout サブプロセス タイムアウト
        • calback フィードバック
        • error がエラーを する(サブルーチンのエラー ではない)
        • stdout サブルーチン
        • stder サブルーチン エラー
        • const execFile = require('child_process').execFile;
          execFile('ls', ['--version'], function(error, stdout, stderr) {
              if(err) {
                  console.log('    ', err);
              }
              console.log('stdout', stdout);
              console.log('stderr', stderr);
          });
          のルーチン は じexecです.
          forkforkは、spawnの な であり、 に しいNodeJs に するために いられる.spawnは、 に することができる.fork の は の りである.
          fork(modulePath[,args][,options])
        • modulePath が するJSパス
        • args のパラメータリスト
        • options

          • cwd サブルーチンのworkdir
          • env
          • silent がtrueであれば、サブプロセスのstdin、stdout、およびstderは プロセスに られます.そうでなければ、それらは プロセスから されます.デフォルトfalse
          • b.js
            const fork = require('child_process').fork;
            
            const child = fork('./a.js',{silent:true}); // silent true                   
            child.stdout.on('data',function(data){ //          
                console.log('child stdout', data.toString('utf8'));
            });
            child.stderr.on('data', function(data){ //            
                console.log('child stderr', data.toString('utf8'));
            });
            child.on('close', function(){
                console.log('child exit');
            });
            a.js
            console.log('     `);
            node b.jsを し、 のルーチン :
            child stdout      
            
            child exit
            おわりに
            ここでサブプロセスモジュールの が しました. にはspawnexecFileを すればいいです. か がありましたら、コードをスキャンして をしてください.