1 단계 : spawn
올바른 방법으로 확인
먼저 child_process.spawn (command, args, options) 문서를 검토하십시오 .
주어진 command
명령 줄 인수와 함께 새로운 프로세스를 시작합니다 args
. 생략하면 args
기본값은 빈 배열입니다.
세 번째 인수는 추가 옵션을 지정하는 데 사용되며 기본값은 다음과 같습니다.
{ cwd: undefined, env: process.env }
사용하여 env
새로운 프로세스로 볼 수 있습니다 환경 변수를 지정하려면 기본입니다 process.env
.
명령 행 인수를 넣지 않았고 command
전체 spawn
호출이 유효한지 확인하십시오 . 다음 단계로 진행하십시오.
2 단계 : 오류 이벤트를 발생시키는 이벤트 이미 터 식별
각 호출에 대한 소스 코드를에 검색 spawn
하거나 child_process.spawn
, 즉,
spawn('some-command', [ '--help' ]);
거기에 'error'이벤트에 대한 이벤트 리스너를 연결하면 'Unhandled'로 던지는 정확한 이벤트 이미 터가 나타납니다. 디버깅 후 해당 핸들러를 제거 할 수 있습니다.
spawn('some-command', [ '--help' ])
.on('error', function( err ){ throw err })
;
실행하면 '오류'리스너가 등록 된 파일 경로와 줄 번호를 가져와야합니다. 다음과 같은 것 :
/file/that/registers/the/error/listener.js:29
throw err;
^
Error: spawn ENOENT
at errnoException (child_process.js:1000:11)
at Process.ChildProcess._handle.onexit (child_process.js:791:34)
처음 두 줄이 여전히
events.js:72
throw er; // Unhandled 'error' event
그렇지 않을 때까지이 단계를 다시 수행하십시오. 다음 단계로 진행하기 전에 오류를 발생시키는 리스너를 식별해야합니다.
3 단계 : 환경 변수 $PATH
가 설정되어 있는지 확인
두 가지 가능한 시나리오가 있습니다.
- 기본
spawn
동작 에 의존 하므로 하위 프로세스 환경은와 동일합니다 process.env
.
- 인수 에
env
객체를 명시 적으로 전달하고 있습니다.spawn
options
두 시나리오 모두 PATH
에서 생성 된 자식 프로세스가 사용할 환경 개체 의 키를 검사해야합니다 .
시나리오 1의 예
// inspect the PATH key on process.env
console.log( process.env.PATH );
spawn('some-command', ['--help']);
시나리오 2의 예
var env = getEnvKeyValuePairsSomeHow();
// inspect the PATH key on the env object
console.log( env.PATH );
spawn('some-command', ['--help'], { env: env });
의 부재는 PATH
(즉, 그것의가 undefined
)의 원인이됩니다 spawn
방출하는 ENOENT
오류 는 어떤 위치를 할 수 없으므로, command
이 실행 파일의 절대 경로가 아니면.
PATH
설정이 끝나면 다음 단계로 진행하십시오. 디렉토리이거나 디렉토리 목록이어야합니다. 마지막 경우가 일반적입니다.
4 단계 : command
에 정의 된 디렉토리에 존재 하는지 확인PATH
ENOENT
파일 이름 command
(예 : 'some-command')이에 정의 된 디렉토리 중 하나 이상에 없으면 스폰에서 오류가 발생할 수 있습니다 PATH
.
의 정확한 위치를 찾으십시오 command
. 대부분의 리눅스 배포판에서는이 which
명령 을 사용하여 터미널에서이를 수행 할 수 있습니다 . 실행 파일의 절대 경로 (위와 같이)를 찾거나 찾을 수 없는지 알려줍니다.
명령이 발견 될 때의 사용법 및 출력 예
> which some-command
some-command is /usr/bin/some-command
명령을 찾을 수없는 경우의 사용법 및 출력 예
> which some-command
bash: type: some-command: not found
잘못 설치된 프로그램은 찾을 수없는 명령 의 가장 일반적인 원인입니다 . 필요한 경우 각 명령 설명서를 참조하여 설치하십시오.
command가 간단한 스크립트 파일 인 경우의 디렉토리에서 액세스 할 수 있는지 확인하십시오 PATH
. 그렇지 않은 경우 다른 것으로 이동하거나 링크를 만드십시오.
PATH
올바르게 설정되어 command
액세스 가능한 것으로 판단되면 , 자식 프로세스를 spawn ENOENT
던지지 않고 생성 할 수 있어야합니다 .
exec
첫 번째 인수로 명령을 전달하고 두 번째 인수에 대한 옵션을 옵션으로 배열하는 대신 전체 명령을 문자열 로 전달했습니다. 예를 들어 내가spawn( "adb logcat -c" )
대신 하고 있었다spawn( "adb", [ "logcat", "-c" ] )
.