Node.js で start コマンドを呼び出すと終わらない時がある
◆ Node.js から start コマンドで chrome を起動するとすぐに Node.js は終了できる
◆ notepad の場合はメモ帳ウィンドウを閉じるまで Node.js が終了できない
◆ notepad でも stdio を ignore にするとすぐに終了させれる
◆ notepad の場合はメモ帳ウィンドウを閉じるまで Node.js が終了できない
◆ notepad でも stdio を ignore にするとすぐに終了させれる
Windows のコマンドプロンプトで
を実行するとどちらもウィンドウが起動したらコマンドラインのプログラムは終了して 次のプロンプトが出ます
bat ファイルに書いた場合は 一瞬コマンドプロンプトの画面が出て Chrome やメモ帳が起動したらすぐに閉じます
このように start コマンドを使って起動するとコマンドラインプログラム自体はすぐに閉じてくれます
ですが これを Node.js で使うとうまく動きませんでした
child_process の spawn を使ってコマンドラインのプログラムを実行します
この場合は Chrome を起動して すぐに spawn で実行したコマンドは終わるので Node.js のプログラム自体がすぐに終了します
これが想定した動きです
しかし メモ帳だとなぜかうまくいきません
メモ帳以外にもこうなるソフトはあるのですが これらの場合は起動したウィンドウが閉じるまで start コマンドが終わらず Node.js プログラムが終了しません
メモ帳を閉じれば Node.js プログラムも終了します
いろいろ試してると stdio があるのが問題みたいで オプションで stdio に ignore を設定すると notepad でもすぐに終了するようになりました
解決方法から考えると 起動するプログラムが stdio を使った入出力を扱うかどうかですぐに終わるか起動したままになるかが変わりそうです
start "" chrome
start "" notepad
を実行するとどちらもウィンドウが起動したらコマンドラインのプログラムは終了して 次のプロンプトが出ます
bat ファイルに書いた場合は 一瞬コマンドプロンプトの画面が出て Chrome やメモ帳が起動したらすぐに閉じます
このように start コマンドを使って起動するとコマンドラインプログラム自体はすぐに閉じてくれます
ですが これを Node.js で使うとうまく動きませんでした
const { spawn } = require("child_process")
spawn("start", ["", "chrome"], { shell: true })
child_process の spawn を使ってコマンドラインのプログラムを実行します
この場合は Chrome を起動して すぐに spawn で実行したコマンドは終わるので Node.js のプログラム自体がすぐに終了します
これが想定した動きです
しかし メモ帳だとなぜかうまくいきません
const { spawn } = require("child_process")
spawn("start", ["", "notepad"], { shell: true })
メモ帳以外にもこうなるソフトはあるのですが これらの場合は起動したウィンドウが閉じるまで start コマンドが終わらず Node.js プログラムが終了しません
メモ帳を閉じれば Node.js プログラムも終了します
いろいろ試してると stdio があるのが問題みたいで オプションで stdio に ignore を設定すると notepad でもすぐに終了するようになりました
const { spawn } = require("child_process")
spawn("start", ["", "notepad"], { shell: true, stdio: "ignore" })
解決方法から考えると 起動するプログラムが stdio を使った入出力を扱うかどうかですぐに終わるか起動したままになるかが変わりそうです