[解決済み] Golang で os/exec で開始したプロセスを終了させる
2023-06-13 23:32:28
質問
Golangでos.execで起動したプロセスを終了させる方法はありますか?例えば(以下 http://golang.org/pkg/os/exec/#example_Cmd_Start ),
cmd := exec.Command("sleep", "5")
err := cmd.Start()
if err != nil {
log.Fatal(err)
}
log.Printf("Waiting for command to finish...")
err = cmd.Wait()
log.Printf("Command finished with error: %v", err)
そのプロセスを前もって、おそらく3秒後に終了させる方法はありますか?
ありがとうございます。
どのように解決するのですか?
を実行し、終了させる。
exec.Process
:
// Start a process:
cmd := exec.Command("sleep", "5")
if err := cmd.Start(); err != nil {
log.Fatal(err)
}
// Kill it:
if err := cmd.Process.Kill(); err != nil {
log.Fatal("failed to kill process: ", err)
}
を実行し、終了させる。
exec.Process
を実行し、タイムアウト後に終了させる。
ctx, cancel := context.WithTimeout(context.Background(), 3 * time.Second)
defer cancel()
if err := exec.CommandContext(ctx, "sleep", "5").Run(); err != nil {
// This will fail after 3 seconds. The 5 second sleep
// will be interrupted.
}
この例は のドキュメントを参照してください。
レガシー
Go 1.7 より前のバージョンでは、私たちは
context
パッケージがなく、この回答は異なっていました。
を実行し、終了させる。
exec.Process
を実行し、タイムアウト後に終了させます。
// Start a process:
cmd := exec.Command("sleep", "5")
if err := cmd.Start(); err != nil {
log.Fatal(err)
}
// Wait for the process to finish or kill it after a timeout (whichever happens first):
done := make(chan error, 1)
go func() {
done <- cmd.Wait()
}()
select {
case <-time.After(3 * time.Second):
if err := cmd.Process.Kill(); err != nil {
log.Fatal("failed to kill process: ", err)
}
log.Println("process killed as timeout reached")
case err := <-done:
if err != nil {
log.Fatalf("process finished with error = %v", err)
}
log.Print("process finished successfully")
}
プロセスが終了し、そのエラー(もしあれば)を
done
または3秒が経過し、プログラムが終了する前に強制終了される。
関連
-
[解決済み] time.Sleepを使わずにすべてのゴルーチンが終了するのを待つには?
-
[解決済み] 構造体の値をマップの値として設定すると、"cannot assign" エラーが発生するのはなぜですか?重複
-
[解決済み] 文字列を小文字に変換する方法を教えてください。
-
[解決済み] 空のスライスをチェックするにはどうしたらいいですか?
-
[解決済み] gc」と「gccgo」の主な相違点は何ですか?
-
[解決済み] 複数のゴルーチンが1つのチャンネルをリッスンする
-
[解決済み] Go で POST リクエストを送信するには?
-
[解決済み] 文字列がint型かどうかチェックする
-
[解決済み] Goチャンネルはどのように実装されるのですか?
-
[解決済み] Go でローカル IP アドレスを取得するにはどうしたらいいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] サーバーでSSLが有効になっていない
-
[解決済み] あるプログラムの依存ファイルをすべて取得する方法
-
[解決済み] Goのコンパイル済み実行ファイルのサイズが巨大化する理由
-
[解決済み] golangにおけるバックティック(``)とダブルクォート("")の違いは何ですか?
-
[解決済み] golangでISO 8601の時刻を変換するには?
-
[解決済み] 標準入力から整数を読み込む
-
[解決済み] Go で要件をインストールするにはどうすればよいですか? "パッケージが見つかりません"
-
[解決済み] Go で / に異なるメソッドの http リクエストを処理するにはどうすればよいですか?
-
[解決済み] env varが空の場合、どのようにデフォルト値を割り当てるのですか?
-
[解決済み] Goで複数のコマンドをパイプでつなぐには?