2017-12-28 41 views
1

私はスクリプトを定義するpackage.jsonを持っています。このスクリプトはnodeアプリを起動します。npm子プロセスを強制終了する方法

npmスクリプトはテストによって起動されており、この最後のスクリプトはテストが終了するとdebugスクリプトを強制終了する必要があります。

したがって、spawnnpm run debugと私がそれを殺すと、nodeプロセスは強制終了されません。

私はchild_process.killで全体のプロセスを強制終了してpidnpm run debugを使用して起動nodeに属していないので、運にkill bashコマンドを産卵するか試してみました。

私はそのpidを持っていないそのnodeプロセスを殺す方法はありますか?

答えて

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'で私の問題を解決したので、あなた自身の答えでそれを提案することができました。何故なの? –

関連する問題