2017-07-28 16 views
0

こんにちは私は、プロセスを監視し、プロセスがクラッシュした場合にプロセスを再起動する簡単なコードに取り組んでいます。私は小さなサンプルコードを書いています。子なしのプロセスが終了するまで待つ

これは、これはそれを監視するコードである私の外部プロセス

package main 

import (
    "fmt" 
    "time" 
) 

func main() { 
    for { 
     time.Sleep(1000 * time.Millisecond) 
     fmt.Println("hello") 
    } 
} 

です。

package main 

import (
    "fmt" 
    "os" 
) 

func main() { 
    p, e := os.FindProcess(<processid>) 
    fmt.Println(e) 
    fmt.Println(p.Wait()) 
    fmt.Println("done") 
} 

ここでの課題は、最初のプロセスが第二1の子プロセスではないので、それは待って直接出ていないということです。 誰かがこれについてのアイディアを持っているかどうか教えてください。

ありがとうございました。

+0

go-psを試しましたか? https://github.com/mitchellh/go-ps またはgops? https://github.com/google/gops – pltvs

答えて

0

p.Wait()がブロックしないため、監視プロセスが終了します。 docsから

:ほとんどのオペレーティング・システムで

、プロセスは、現在の プロセスの子またはエラーが返されますなければなりません。

プロセスプールをポーリングして、プロセスがまだ存在するかどうかを確認できます。

+0

あなたはポーリングの仕組みを知っていますか?パイプは1つの方法ですが、あまり複雑ではないソリューションを実装したい – Pharaoh

+0

上記のコメントに記載されているパッケージのいずれかを試すことができます。たとえば、go-psを使用し、プロセス実行可能ファイルをループで断続的にチェックして、プロセスがまだ実行中かどうかを確認します。パイプは複雑かもしれませんが、より良い解決策になります。 – abhink

関連する問題