일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |
- 게시판
- http://jeonghwan-kim.github.io/dev/2019/06/25/react-ts.html
- https://velog.io/@velopert/create-typescript-react-component
- object
- 출처 : https://joshua1988.github.io/web-development/javascript/promise-for-beginners/
- toString
- 출처 : https://webdir.tistory.com/506
- Today
- Total
Back Ground
Node - 자식 프로세스 [child_process] 본문
child_process
‘Node.js ChildProess‘는 자식프로세스 기능을 사용할 수 있게 한다.
이 모듈을 사용하기 위해서는 다음 메서드로 자식 프로세스를 생성해야 한다.
1 | require(‘child_process’).spawn(command, args=[], [options]) | cs |
options: 기본값은 { cwd:undefined, env:process.env, setsid: false } 이다.
- ‘cwd’는 생성된 프로세스가 실행되는 디렉토리를 지정하는 것이고,
- ‘env’는 새 프로세스가 접근할 수 있는 환경 변수를 지정,
- ‘setsid’가 true이면 서브프로세스를 새 세션으로 생성하게 된다.
(cluster 인 것 같다. )
child_process 종류
자식 프로세스는 child.stdin, child.stdout, child.stderr 의 3가지 종류의 스트림을 사용합니다.
다음은 디렉토리의 파일목록을 출력하는 예제입니다. ChildProcess도 EventEmitter의 객체여서 각 스트림에 이벤트 리스너를 등록할 수 있습니다:
spawn.js
1 2 3 4 5 6 7 8 9 10 11 12 13 | var spawn = require('child_process').spawn, ls = spawn('ls', ['-a']); ls.stdout.on('data', function(data) { console.log('stdout: ' + data); }); ls.stderr.on('data', function(data) { console.log('stderr: ' + data); }); ls.on('exit', function(code) { console.log('exit: ' + code); }); | cs |
결과
> node spawn.js stdout: . ..
helloworld.js nextTick.js
// ... 디렉토리의 파일 목록이 표시됨
exit: 0 |
child_process.exec(command, [options], callback)
- ‘command’를 실행하고 결과를 돌려주는 함수이다.
- 콜백함수는 function(error, stdout, stderr) { } 이다.
- ‘options’ 들어가는 파라미터 기본값은 다음과 같다:
1 2 3 4 5 6 7 8 | { encoding: 'utf8', timeout: 0, // msec maxBuffer: 200*1024, killSignal: 'SIGTERM', cwd: null, env: null } | cs |
‘timeout‘ 후에 프로세스를 종료하며 종료할 때 ‘killSignal‘을 쓴다.
execSync(동기 버전 )
exec의 동기 버전인 execSync가 있다
노드 0.11 버전부터 자식 프로세스의 커맨드를 동기로 실행할 수 있는 기능이 추가 되었다.
1 | child_process.execSync(command[, options]) | cs |
동기 버전은 콜백을 받지 않으며 childprocess인스턴스 대신 stdout을 반환한다.
동기 버전에서 오류가 발생하면,
그것은 던져 프로그램을 중단한다.
1 2 3 | const execSync = require('child_process').execSync; const stdout = execSync('cat *.js file | wc -l'); console.log(`stdout: ${stdout}`); | cs |
[예제]
1 2 3 | function exec (cmd) { return require('child_process').execSync(cmd).toString().trim() } | cs |
1 2 3 4 5 6 7 8 | if (shell.which('npm')) { versionRequirements.push({ name: 'npm', currentVersion: exec('npm --version'), versionRequirement: packageConfig.engines.npm }) } | cs |
shell 부분은
https://backback.tistory.com/360 참고
문서 : http://nodejs.sideeffect.kr/docs/v0.8.15/api/child_process.html
출처 : http://chromeextension.kr/2016/08/node-js-childprocess-module/
child_process
' Node.js ChildProess ' makes it possible to use child process functions.
To use this module, you need to create a child process with the following method.
1 | require(‘child_process’).spawn(command, args=[], [options]) | cs |
options: The default value is {cwd:undefined, env:process.env, setsid: false }.
-'cwd' designates the directory where the created process is executed,
-'env' specifies an environment variable that the new process can access,
-If'setsid' is true, the subprocess is created as a new session.
(It seems to be a cluster.)
child_process type
Child processes use three kinds of streams: child.stdin, child.stdout, and child.stderr.
The following is an example of printing the list of files in a directory. ChildProcess is also an object of EventEmitter so you can register event listeners on each stream
spawn.js
1 2 3 4 5 6 7 8 9 10 11 12 13 | var spawn = require('child_process').spawn, ls = spawn('ls', ['-a']); ls.stdout.on('data', function(data) { console.log('stdout: ' + data); }); ls.stderr.on('data', function(data) { console.log('stderr: ' + data); }); ls.on('exit', function(code) { console.log('exit: ' + code); }); | cs |
result
> node spawn.js stdout: . ..
helloworld.js nextTick.js
// ... displays a list of files in the directory
exit: 0 |
child_process.exec(command, [options], callback)
-This is a function that executes'command' and returns the result.
-The callback function is function(error, stdout, stderr) {}.
-The default parameters for'options' are as follows:
1 2 3 4 5 6 7 8 | { encoding: 'utf8', timeout: 0, // msec maxBuffer: 200*1024, killSignal: 'SIGTERM', cwd: null, env: null } | cs |
' Timeout exits the process after " when exiting " killSigna writes l'.
execSync (synchronous version)
There is execSync , a synchronous version of exec
Starting with Node 0.11, the ability to synchronously execute commands of child processes has been added.
1 | child_process.execSync(command[, options]) | cs |
The synchronous version does not receive a callback and returns stdout instead of a childprocess instance .
If an error occurs in the synchronous version,
It throws and stops the program.
1 2 3 | const execSync = require('child_process').execSync; const stdout = execSync('cat *.js file | wc -l'); console.log(`stdout: ${stdout}`); | cs |
[example]
1 2 3 | function exec (cmd) { return require('child_process').execSync(cmd).toString().trim() } | cs |
1 2 3 4 5 6 7 8 | if (shell.which('npm')) { versionRequirements.push({ name: 'npm', currentVersion: exec('npm --version'), versionRequirement: packageConfig.engines.npm }) } | cs |
shell part
See https://backback.tistory.com/360
Document: http://nodejs.sideeffect.kr/docs/v0.8.15/api/child_process.html
Source: http://chromeextension.kr/2016/08/node-js-childprocess-module/
child_process
「Node.js ChildProess」は、子プロセスの機能を使用できるようにする。
このモジュールを使用するには、次のメソッドで、子プロセスを生成しなければならない。
1 | require(‘child_process’).spawn(command, args=[], [options]) | cs |
options:デフォルトは{cwd:undefined、env:process.env、setsid:false}である。
- 「cwd」は、生成されたプロセスが実行されているディレクトリを指定することで、
- 「env」は、新しいプロセスがアクセスできる環境変数を指定し、
- 「setsid」がtrueの場合、サブプロセスを新しいセッションで生成される。
(clusterのようだ。)
child_process種類
子プロセスはchild.stdin、child.stdout、child.stderrの3種類のストリームを使用します。
以下は、ディレクトリのファイルのリストを出力する例です。ChildProcessもEventEmitterのオブジェクトなので、各ストリームにイベントリスナーを登録することができます:
spawn.js
1 2 3 4 5 6 7 8 9 10 11 12 13 | var spawn = require('child_process').spawn, ls = spawn('ls', ['-a']); ls.stdout.on('data', function(data) { console.log('stdout: ' + data); }); ls.stderr.on('data', function(data) { console.log('stderr: ' + data); }); ls.on('exit', function(code) { console.log('exit: ' + code); }); | cs |
결과
> node spawn.js stdout: . ..
helloworld.js nextTick.js
// ...ディレクトリのファイルのリストが表示される
exit: 0 |
child_process.exec(command, [options], callback)
- 「command」を実行し、結果を返す関数である。
- コールバック関数は、function(error、stdout、、stderr){}である。
- 「options」入るパラメータデフォルト値は、次の通りである:
1 2 3 4 5 6 7 8 | { encoding: 'utf8', timeout: 0, // msec maxBuffer: 200*1024, killSignal: 'SIGTERM', cwd: null, env: null } | cs |
「timeout」の後のプロセスを終了し、終了したときに「killSigna l」を使う。
execSync(同期バージョン)
execの 同期バージョンであるexecSyncがある
ノード0.11バージョンから、子プロセスのコマンドを同期で実行することができる機能が追加されました。
1 | child_process.execSync(command[, options]) | cs |
同期バージョンは、コールバックを受けず、 childprocessインスタンス の代わりに stdoutを 返します。
同期バージョンでエラーが発生した場合、
それを投げるプログラムを中断する。
1 2 3 | const execSync = require('child_process').execSync; const stdout = execSync('cat *.js file | wc -l'); console.log(`stdout: ${stdout}`); | cs |
[例]
1 2 3 | function exec (cmd) { return require('child_process').execSync(cmd).toString().trim() } | cs |
1 2 3 4 5 6 7 8 | if (shell.which('npm')) { versionRequirements.push({ name: 'npm', currentVersion: exec('npm --version'), versionRequirement: packageConfig.engines.npm }) } | cs |
shell 部分は
https://backback.tistory.com/360参考
記事: http://nodejs.sideeffect.kr/docs/v0.8.15/api/child_process.html
出典: http://chromeextension.kr/2016/08/node-js-childprocess-module/
'Javascript > Node.js' 카테고리의 다른 글
Node - 이벤트 (0) | 2019.03.17 |
---|---|
Node - 한국소프트웨어인재개발원 (0) | 2019.03.17 |
Node - 외부 명령어를 실행 해주는 모듈 [shelljs] (0) | 2019.03.11 |
Node - 시멘틱 버전 체크를 위한 모듈 [semver] (0) | 2019.03.11 |
Node - Log color 지정 모듈 [chalk] (1) | 2019.03.11 |