私がプロセスを実行しているNodeJを使用することで、すべてが正常に機能しています。唯一の問題は、親アプリが強制終了または閉じられた場合でも、プロセスexeが実行され続けることです。
たとえば、プロセスを強制終了するコード
require('child_process').exec(require('./globalconfig').CMD_BASE_PATH + 'taskkill.exe /im finder.exe /F', function (error, stdout, stderr) {
if (error) {
require('./loggerHelper').logger.error(error)
}
})
これにより、「finder.exe」は強制終了されますが、タスクマネージャーを監視すると、「taskkill.exe」は実行を継続します。finder.exeを強制終了した後、taskkill.exeが終了するはずですが、なぜこれが発生しているのか、どうすれば解決できるのでしょうか。
使用してexec
スポーンに必要なコマンドを起動するためのシェルを、いずれかprocess.env.ComSpec
またはcmd.exe
Windows上で。これにより、node
起動されるプロセスとの間に追加のレイヤーが追加されます。プロセスが実行され続ける理由については完全な答えではありませんが、を使用exec
すると、問題が発生する可能性が高くなります。
を使用spawn
すると、親node
プロセスがシグナルを直接制御して子プロセスに渡すことができます。
const { spawn } = require('child_process')
const { CMD_BASE_PATH } = require('./globalconfig')
const find = spawn(`${CMD_BASE_PATH}taskkill.exe`, ['/im', 'finder.exe', '/F'])
find.stdout.on('data', data => {
console.log('stdout: %s', data)
})
find.stderr.on('data', data => {
console.log('stderr: %s', data)
})
find.on('close', code => {
if ( code !== 0 ) console.error(`Finder exited with error: ${code}`)
})
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加