Einen Prozess starten, in zu Gehen und trennen Sie es

Brauche ich einen neuen Prozess starten im Gehen mit den folgenden Anforderungen:

  • Der Startvorgang soll ausgeführt werden, auch nach dem Go-Prozess beendet
  • Ich muss in der Lage sein, die Unix-Benutzer - /Gruppe ausgeführt wird, die es
  • Ich muss in der Lage sein, um die Umgebungsvariablen vererbt
  • Ich brauche Kontrolle über die std-in/out/err

Hier ist ein Versuch:

var attr = os.ProcAttr {
Dir: "/bin",
Env: os.Environ(),
Files: []*os.File{
    os.Stdin,
    "stdout.log",
    "stderr.log",
  },
}
process, err := os.StartProcess("sleep", []string{"1"}, &attr)

Dies funktioniert gut, hat aber folgende Mängel, die aus den Anforderungen:

  • Keine Möglichkeit, Unix-Benutzer - /Gruppen -
  • Gestarteten Prozess endet, wenn der Go-Prozess (parent) hält

Diese muss auf Linux laufen nur, wenn das vereinfacht die Dinge.

  • Es sieht aus wie, was Sie tun möchten, ist zu Gabel Prozess. Gibt es Einschränkungen dabei in einem Go-Programm Finden Sie in dieser Ausgabe: code.google.com/p/go/issues/detail?id=227
  • Sie können nicht wirklich fork() im Gehen, insbesondere, wenn die runtime läuft. Der Kind-Prozess sollte die Führung der Ablösung von den Eltern, oder verwenden Sie einen wrapper wie start-stop-daemon.
InformationsquelleAutor Khash | 2014-04-12
Schreibe einen Kommentar