processとchild_processの使い方の詳しい説明
今回は process と child_process の使用方法について詳しく説明します。 process と child_process を使用する際の 注意事項 は何ですか?実際のケースを見てみましょう。
一週間プロセスに苦労した後、ようやくこの難解な文書を理解しました。私は自分の理解を皆さんと共有する準備ができています。また、皆さんがいくつかの意見を指摘してくれることを願っていますプロセスの概念。 in
Node .js- 内の各アプリケーションは、プロセス クラスのインスタンス オブジェクトです。
プロセス オブジェクトを使用してアプリケーションを表します。これは、Node.jsy アプリケーションのプロパティ、メソッド、イベント、およびプログラムを実行しているユーザーや環境などのさまざまな情報を取得できるグローバル オブジェクトです。
- プロセス内のいくつかの重要な属性
stdin標準入力読み取り可能ストリーム
- stdout標準入力書き込み可能ストリーム
- stderr標準エラー出力ストリーム
- ar gv ターミナル入力パラメータ 配列
- env オペレーティング システム環境情報
- pid アプリケーション プロセス ID
- stdin および stdout
実行結果
process.stdin.on('data', (chunk) => { process.stdout.write('进程接收到数据' + chunk) })
ログイン後にコピー
argv
console.log(process.env)
env: Mac ターミナルで「export」と入力 NODE_ENV=develop
console.log(process.env.NODE_ENV) //develop
プロセスメソッド
process.memoryUsage() メモリ使用量情報の表示
- process.nextTick() 現在のイベントループの実行後にコールバック関数を実行
process chdir メソッドは、Node.js アプリケーションで使用される現在の作業ディレクトリを変更するために使用されます
process.cwd() 現在の作業ディレクトリを処理します - process.kill() プロセスを強制終了します
- process.uncaught
- 例外
() は、アプリケーションがキャッチされない例外をスローしたときに、プロセス オブジェクトの uncaughtException イベントをトリガーします
-
say() //方法不存在 process.on('uncaughtException',function(err){ console.log('捕获到一个未被处理的错误:',err); });
ログイン後にコピー 子プロセスが今日の話の焦点です。私も理解できていないと思います。みんなでもっとコミュニケーションしましょう
child_processの背景
Node.jsでは、すべての操作を実行するスレッドが1つしかありませんが、ある操作に大量のCPUリソースが必要な場合、後続の操作は待機する必要があります。
Node.jsではchild_processモジュールが提供されており、これを介して複数の子プロセスを起動したり、複数の子プロセス間でメモリ空間を共有したり、子プロセス間の相互通信による情報交換を行うことができます。 child_process モジュールは、ノードに子プロセスを自由に作成する機能を提供します。公式ノードのドキュメントでは、child_proces モジュールの 4 つのメソッドが提供されており、これらは実際に子プロセスを作成するためにオペレーティング システムにマップされています。ただし、開発者にとって、これらのメソッドの API は少し異なります
child_process.exec(command[, options][, callback]) は、
子プロセスを開始してシェル コマンドを実行し、コールバックを通じてスクリプト シェルの実行結果を取得できます。パラメータchild_process.execfile(file[, args][, options][, callback])
exec型とは異なり、シェルコマンドではなく実行ファイルを実行します
child_process.spawn(command[, args] [, options]) は、実行結果を取得せずにシェルコマンドのみを実行します。
を使用できます。フォークから出てくる子プロセスはノードプロセスでなければなりません
spawn
構文: child_process.spawn(command, [args], [options])
command 指定する必要があるパラメータは、コマンドを指定します。実行する必要があります
- args配列。コマンドの実行に必要なすべてのパラメータが格納されます
options 参数为一个对象,用于指定开启子进程时使用的选项
const { spawn } = require('child_process') const path = require('path') let child1 = spawn('node', ['test1.js', 'yanyongchao'], { stdio: ['pipe', 'pipe', 'pipe'], // 三个元素数组 下面会详解 cwd: dirname, 子进程工作目录 env: process.env, 环境变量 detached: true // 如果为true,当父进程不存在时也可以独立存在 })
其实上面都好理解除了sdtio数组,下面来一起分析stdio
stdio
stdio是一个数组,用来设置标准输入,标准输出,错误输出。个人理解
pipe:父进程和子进程之间建立一个管道
主进程代码
const path = require('path') const { spawn } = require('child_process') let p = spawn('node', ['childs_t.js'], { cwd: path.join(dirname, 'childs'), stdio: ['pipe', 'pipe', process.stderr] }) p.stdout.on('data', (data) => { console.log(data.toString()) }) // 这里用stdout原因: 子进程的数据流与常规理解的数据流方向相反, // stdin:写入流,stdout、stderr:读取流。
子进程代码
process.stdout.write('asd')
如果在stdio中放一个流,process.stdout,process.stdin
主进程代码
const { spawn } = require('child_process') const path = require('path') // 如果放的是一个流,则意味着父进程和子进程共享一个流 const p = spawn('node', ['child_t.js'], { cwd: path.join(dirname, 'childs'), stdio: [process.stdin, process.stdout, process.stderr] })
子进程代码
process.stdout.write('asd') //控制台会输出asd
ipc
主进程代码
const path = require('path') const { spawn } = require('child_process') let p = spawn('node', ['child_t.js'], { cwd: path.join(dirname, 'childs'), stdio: ['ipc', 'pipe', 'pipe'] }) p.on('message', (msg) => { console.log(msg) }) p.send('hello chhild_process')
子进程代码
process.on('message', (msg) => { process.send('子进程' + msg) }) // child.send(message,[sendHandle]);//在父进程中向子进程发送消息 // process.send(message,[sendHandle]);//在子进程中向主进程发送消息
detached模式
const { spawn } = require('child_process') const fs = require('fs') const path = require('path') let out = fs.openSync(path.join(dirname, 'childs/msg.txt'), 'w', 0o666) let p = spawn('node', ['test4.js'], { detached: true, //保证父进程结束,子进程仍然可以运行 stdio: 'ignore', cwd: path.join(dirname, 'childs') }) p.unref() p.on('close', function() { console.log('子进程关闭') }) p.on('exit', function() { console.log('子进程退出') }) p.on('error', function(err) { console.log('子进程1开启失败' + err) })
fork开启一个子进程
衍生一个新的 Node.js 进程,并通过建立一个 IPC 通讯通道来调用一个指定的模块,该通道允许父进程与子进程之间相互发送信息
fork方法返回一个隐式创建的代表子进程的ChildProcess对象
子进程的输入/输出操作执行完毕后,子进程不会自动退出,必须使用process.exit()方法显式退出
子进程代码
const { fork } = require('child_process') const path = require('path') let child = fork(path.join(dirname, 'childs/fork1.js')) child.on('message', (data) => { console.log('父进程接收到消息' + data) }) child.send('hello fork') child.on('error', (err) => { console.error(err) })
子进程代码
process.on('message', (m, setHandle) => { console.log('子进程接收到消息' + m) process.send(m) //sendHandle是一个 net.Socket 或 net.Server 对象 })
exec开启子进程
// exec同步执行一个shell命令 let { exec } = require('child_process') let path = require('path') // 用于使用shell执行命令, 同步方法 let p1 = exec('node exec.js a b c', {cwd: path.join(dirname, 'childs')}, function(err, stdout, stderr) { console.log(stdout) })
execFile开启子进程
let { execFile } = require('child_process') let path = require('path') let p1 = execFile('node', ['exec.js', 'a', 'b', 'c'], { cwd: path.join(dirname, 'childs') }, function(err, stdout, stderr) { console.log(stdout) })
相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!
推荐阅读:
以上がprocessとchild_processの使い方の詳しい説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











Windows オペレーティング システムは世界で最も人気のあるオペレーティング システムの 1 つであり、その新バージョン Win11 が大きな注目を集めています。 Win11 システムでは、管理者権限の取得は重要な操作であり、管理者権限を取得すると、ユーザーはシステム上でより多くの操作や設定を実行できるようになります。この記事では、Win11システムで管理者権限を取得する方法と、権限を効果的に管理する方法を詳しく紹介します。 Win11 システムでは、管理者権限はローカル管理者とドメイン管理者の 2 種類に分かれています。ローカル管理者はローカル コンピュータに対する完全な管理権限を持っています

C++ のモード関数の詳細な説明 統計において、モードとは、一連のデータ内で最も頻繁に現れる値を指します。 C++ 言語では、モード関数を記述することによって、任意のデータセット内のモードを見つけることができます。モード関数はさまざまな方法で実装できます。一般的に使用される 2 つの方法を以下で詳しく紹介します。 1 つ目の方法は、ハッシュ テーブルを使用して各数値の出現回数をカウントすることです。まず、各数値をキー、出現回数を値とするハッシュ テーブルを定義する必要があります。次に、特定のデータセットに対して次を実行します。

OracleSQL の除算演算の詳細な説明 OracleSQL では、除算演算は一般的かつ重要な数学演算であり、2 つの数値を除算した結果を計算するために使用されます。除算はデータベース問合せでよく使用されるため、OracleSQL での除算演算とその使用法を理解することは、データベース開発者にとって重要なスキルの 1 つです。この記事では、OracleSQL の除算演算に関する関連知識を詳細に説明し、読者の参考となる具体的なコード例を示します。 1. OracleSQL での除算演算

C++ の剰余関数の詳しい説明 C++ では、剰余演算子 (%) を使用して、2 つの数値を除算した余りを計算します。これは、オペランドが任意の整数型 (char、short、int、long など) または浮動小数点数型 (float、double など) になる二項演算子です。剰余演算子は、被除数と同じ符号の結果を返します。たとえば、整数の剰余演算の場合、次のコードを使用して実装できます。

Vue.nextTick 関数の使い方と非同期更新での応用について詳しく説明 Vue の開発では、DOM を変更した直後にデータを更新したり、関連する操作が必要になったりするなど、データを非同期で更新する必要がある状況によく遭遇します。データが更新された直後に実行されます。このような問題を解決するために登場したのが、Vue が提供する .nextTick 関数です。この記事では、Vue.nextTick 関数の使用法を詳しく紹介し、コード例と組み合わせて、非同期更新でのアプリケーションを説明します。 1.Vue.nex

PHP-FPM は、PHP のパフォーマンスと安定性を向上させるために一般的に使用される PHP プロセス マネージャーです。ただし、高負荷環境では、PHP-FPM のデフォルト設定ではニーズを満たせない場合があるため、チューニングが必要です。この記事では、PHP-FPM のチューニング方法を詳しく紹介し、いくつかのコード例を示します。 1. プロセスの数を増やす デフォルトでは、PHP-FPM はリクエストを処理するために少数のプロセスのみを開始します。高負荷環境では、プロセス数を増やすことで PHP-FPM の同時実行性を高めることができます。

PHP のモジュロ演算子 (%) は、2 つの数値を除算した余りを取得するために使用されます。この記事では、モジュロ演算子の役割と使用法について詳しく説明し、読者の理解を深めるために具体的なコード例を示します。 1. モジュロ演算子の役割 数学では、整数を別の整数で割ると、商と余りが得られます。たとえば、10 を 3 で割ると、商は 3 になり、余りは 1 になります。モジュロ演算子は、この剰余を取得するために使用されます。 2. モジュロ演算子の使用法 PHP では、% 記号を使用してモジュロを表します。

Linux システム コール system() 関数の詳細説明 システム コールは、Linux オペレーティング システムの非常に重要な部分であり、システム カーネルと対話する方法を提供します。その中でも、system()関数はよく使われるシステムコール関数の一つです。この記事では、system() 関数の使用法を詳しく紹介し、対応するコード例を示します。システム コールの基本概念 システム コールは、ユーザー プログラムがオペレーティング システム カーネルと対話する方法です。ユーザープログラムはシステムコール関数を呼び出してオペレーティングシステムを要求します。
