child_process 예제

위의 예에서 자식 프로세스는 Linux에서 선, 단어 및 문자를 계산하는 wc 명령을 호출합니다. 그런 다음 메인 프로세스 stdin (읽을 수있는 스트림)을 자식 프로세스 stdin (쓰기 가능한 스트림)에 파이프합니다. 이 조합의 결과는 우리가 뭔가를 입력 할 수있는 표준 입력 모드를 얻고 우리가 Ctrl + D를 칠 때, 우리가 입력 한 것은 wc 명령의 입력으로 사용됩니다. 포크 함수는 노드 프로세스를 스폰하기 위한 스폰 함수의 변형입니다. 스폰과 포크의 가장 큰 차이점은 포크를 사용할 때 자식 프로세스에 통신 채널이 설정되므로 전역 프로세스 개체 자체와 함께 포크 프로세스의 송신 함수를 사용하여 부모 간에 메시지를 교환할 수 있다는 것입니다. 그리고 포크 프로세스. EventEmitter 모듈 인터페이스를 통해 이 작업을 수행합니다. 다음은 위의 에코 명령에 상위 프로세스의 환경 변수에 액세스할 수 없습니다. 예를 들어 $HOME 액세스할 수는 없지만 env 옵션을 통해 사용자 지정 환경 변수로 전달되었기 때문에 $ANSWER 액세스할 수 있습니다.

위의 예에서 노드는 서브 쉘을 생성하고 명령 „netstat -aon | 실행합니다. 해당 하위 셸에서 „9000“을 찾습니다. 명령 문자열에는 두 가지 명령이 포함되어 있습니다: shell 구문을 사용하면 외부에서 제공되는 모든 종류의 동적 입력을 실행하는 경우 보안 위험이 따릅니다. 사용자는 셸 구문 문자를 사용하여 명령 주입 공격을 간단히 수행할 수 있습니다. 및 $ (예를 들어, 명령 + `; rm -rf ~`) 여기에 이전 의 발견 | wc 예제는 exec 함수로 구현됩니다. 이 문서에서 사용할 예제는 모두 Linux 기반입니다. Windows에서 Windows 대안과 함께 사용하는 명령을 전환해야합니다. 우리는 또한 우리가 리눅스 명령으로 할 수있는 것처럼, 서로 여러 프로세스의 표준 입력 / 출력을 파이프 할 수 있습니다. 예를 들어, 찾기 명령의 stdout을 wc 명령의 stdin에 파이프하여 현재 디렉토리의 모든 파일을 계산할 수 있습니다. , child.stderr 데이터 이벤트 처리기가 트리거되고 exit 이벤트 처리기가 오류가 발생했음을 나타내는 1의 종료 코드를 보고합니다. 오류 값은 실제로 호스트 OS및 오류 유형에 따라 달라집니다. 쉘과 stdio 외에 child_process 함수에 대한 마지막 인수에서 사용할 수있는 몇 가지 다른 좋은 옵션이 있습니다.

예를 들어 cwd 옵션을 사용하여 스크립트의 작업 디렉토리를 변경할 수 있습니다. 예를 들어 셸을 사용하여 스폰 함수를 사용하고 내 다운로드 폴더로 설정된 작업 디렉토리를 사용하여 수행한 동일한 모든 파일 수 예입니다. 여기서 cwd 옵션은 스크립트가 ~/Downloads에 있는 모든 파일을 계산합니다: 스폰 함수(위의 자식 개체)를 실행한 결과는 EventEmitter API를 구현하는 ChildProcess 인스턴스입니다.