2017-12-28 42 views
1

나는 debug 스크립트를 정의한 package.json을 가졌습니다. 이 스크립트는 node 앱을 실행합니다.npm 하위 프로세스를 죽이는 방법

전체 npm 스크립트가 테스트에 의해 실행되며이 마지막 테스트는 테스트가 끝나면 debug 스크립트를 종료해야합니다.

그래서 내가 spawnnpm run debug이고 죽이면, node 프로세스가 죽지 않습니다.

내가 child_process.kill으로 전체 프로세스를 죽이고 npm run debug를 사용하여 출시 node에 속하지 않는 pid 이후 행운으로 kill bash는 명령을 산란 중 하나를 시도했습니다.

node 나는 pid을 소유하고 있지 않은 프로세스를 어떻게 삭제합니까?

답변

0

스크립트를 실행하는 사용자가 그것을 할 수있는 권한을 가지고있는 한 PID를 소유 할 필요가 없습니다.

명령을 생성 할 수 있고 명령 행 에서처럼 (여러 가지 방법이 있습니다) 할 수 있습니다. 또한 find-process과 같은 패키지를 사용하면 이러한 방법으로 프로세스를 찾을 수 있습니다.

더 쉬운 방법은 debug (가능한 경우)을 시작할 때 pid가있는 파일을 작성하는 것입니다. 그런 다음 해당 파일을 다시 읽어 PID를 얻을 수 있습니다.

// in debug 
import { writeFile } from 'fs'; 

writeFile('debug.pid', process.pid, 'utf8', err => err && console.log('Error writing pid file')); 

// in app where it'll kill 
import { readFile } from 'fs'; 

let debugPid; 
readFile('debug.pid', 'utf8', (err, data) => err ? console.log('Error reading pid file') : debugPid = data); 

에 관계없이 접근, 당신은 PID가 있으면, 그것을 죽일 process.kill()를 사용

process.kill(pid); 
+0

헤이는, 노력에 대한 감사합니다! [Terminate] (https://www.npmjs.com/package/terminate) 패키지에 대한 참조를 추가 하시겠습니까? 일부 답변자가 제안한대로 사용했습니다 (그러나 답변은 삭제됩니다). –

+0

일반적으로 특정 라이브러리 또는 패키지를 추천하는 것이 권장되지 않으므로 삭제되었을 수 있습니다. 나는 이미'find-process'를 프로세스 ID를 찾는 패키지의 예로 언급함으로써이 규칙을 다루고있다. – samanime

+0

마침내 나는'Terminate'로 내 문제를 해결 했으므로, 당신 자신의 대답으로 제안 할 수 있습니다. 왜 안돼? –