Vielleicht fehlt mir gerade etwas offensichtlich in der System.Process API (http://hackage.haskell.org/package/process), aber es scheint nicht zu unterstützen, die rohe PID eines Prozesses erstellt. Die API gibt normalerweise einen ProcessHandle zurück, der leicht genug verwendet werden kann, aber dies scheint nicht die Anforderungen einer Bereitstellung zu erfüllen.Wie erhalte ich die Prozess-ID eines erstellten Prozesses in Haskell?
Ich habe einen Fall, in dem ich einen lang andauernden Prozess zum Laichen möge, melden Sie sich den PID es verwendet wird, und in der Lage sein, automatisch zu einem späteren Zeitpunkt wieder zu kommen (Tage, Wochen, Monate) und töte das alte Verfahren und Wieder Starten Sie mit einem neuen Prozess. Ich bin mir sicher, dass es mehrere Möglichkeiten gibt, dieses Auto-Deploy-and-Restart durchzuführen, aber PIDs schienen der einfachste Weg zu sein, ohne zu viel plattformabhängigen Code zu verwenden.
Ich bin offen für andere Vorschläge zu meinem zugrunde liegenden Problem, aber es scheint mir seltsam, dass ich keine direkten PID-Referenzen (oder eine Möglichkeit, sie zu konvertieren) in der Prozess-API finden kann. Dies scheint ein Versehen der API zu sein.
Können Sie das ['unix'] (http://hackage.haskell.org/package/unix-2.7.0.1/docs/System-Posix-Process.html) Paket anstelle von' process' verwenden? –
... oder ['Win32'] (http://hackage.haskell.org/package/Win32-2.2.2.0/docs/System-Win32-Process.html). Der allgemeine Punkt ist, dass die OS-spezifischen APIs im Allgemeinen leistungsfähiger als die plattformübergreifenden sind, da plattformübergreifende nur Dinge unterstützen können, die von allen Betriebssystemen unterstützt werden. –
True, Betriebssystem-spezifische APIs sind in der Regel leistungsfähiger. Aber es ist ein wenig nervig, wenn _eine_ Sache deinen Code daran hindert, vollständig tragbar zu sein. – stormont