プロセスのフォーク: 切り離しとエラー メッセージの処理
Go では、プロセスのフォークにより、プロセスとは独立して実行される子プロセスを作成できます。親。これは、バックグラウンド処理やサービスの作成など、さまざまな理由で役立ちます。
提供されたコードは、os.StartProcess を使用して子プロセスを作成しますが、子プロセスをコマンド ラインから切り離し、接続を維持するのに苦労します。この問題に対処するには、procAttr.Sys.HideWindow を使用して子のウィンドウを非表示にしようとしますが、メモリ ポインターに関連するエラーが発生します。
発生したエラーは、ProcAttr 構造体の Sys フィールドの設定が原因です。間違っています。 Go では、os.StartProcess は Sys フィールドが基礎となるオペレーティング システムに対応する型であることを期待します。 Windows の場合、正しいタイプは syscall.SysProcAttr です。
エラーを解決するには、os.SysProcAttr の代わりに syscall.SysProcAttr を使用するようにコードを変更します。
package main import ( "fmt" "os" "os/exec" "syscall" ) func start() { var procAttr syscall.SysProcAttr procAttr.Files = []*os.File{nil, nil, nil} cmd := exec.Command("c:\Path\to\program.exe") cmd.SysProcAttr = &procAttr if err := cmd.Start(); err != nil { fmt.Printf("%v", err) } } func main() { start() }
専用の syscall を使用するオペレーティング システム固有の設定を入力すると、エラーを回避し、コマンド ラインから子プロセスを正常に切り離すことができます。
以上がGo で子プロセスをデタッチする方法: os.SysProcAttr がジョブにとって間違ったツールである理由の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。