Starten von hintergrund-tasks in einer remote-Sitzung, die nicht getötet werden, wenn Sie die Sitzung entfernt
Ich habe mit PsExec -d
zu starten, Konsole-Anwendungen in einer remote-powershell-Sitzung, weil ich möchte, dass diese apps im hintergrund laufen, während ich einige Aufgabe. Das problem ist, dass ich will, dass die hintergrund-Anwendungen weiterhin ausgeführt, selbst wenn kill ich die remote-powershell-Sitzung mit Remove-PSSession
. Was passiert aktuell ist, sobald die remote-powershell-Sitzung getötet wird, so sind alle Prozesse, die gestartet wurden, mit Hilfe von PsExec -d
. Ich vermute, es hat etwas zu tun mit dem Prozess Bäumen und wie windows verwaltet die Lebensdauer von solchen Dingen.
Hat jemand eine Idee, wie kann ich starten Sie eine remote-hintergrund-Prozess, der Prozess wird beibehalten, auch nach der remote-Sitzung wird getötet?
InformationsquelleAutor davidk01 | 2011-12-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist zuerst eine Erklärung, warum es funktioniert so. Vielleicht kann jemand anders es verwenden, um bringen eine andere Lösung.
Bearbeitete ich meine Antwort mit der Lösung auf Basis von WMI.
Wenn Sie geben Sie eine remote-Sitzung :
Erstellen Sie auf dem server ein Prozess namens
wsmprovhost.exe
wie hier gezeigt, unterWenn Sie einfach beginnen, ein Prozess, in dieser remote-Sitzung :
Der neue Prozess ist ein Kind der
wsmprovhost.exe
wie hier gezeigt, unterBeenden Sie die remote-Sitzung
wsmprovhost.exe
verschwunden und so wird der Kind-Prozess.Die Erklärung ist, dass
wsmprovhost.exe
und alle Prozesse gestartet, die von diesem gehört, den gleichen job.Standardmäßig auf der einen Seite ist dieser job NICHT unterstützt
JOB_OBJECT_LIMIT_BREAKAWAY_OK
limit fahne, die uns nicht erlauben, einen Prozess zu starten mitCREATE_BREAKAWAY_FROM_JOB
fahne, auf der anderen Seite ist dieser job unterstütztJOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE
limit flag, das bewirkt, dass alle Prozesse im Zusammenhang mit der Arbeit zu beenden, wenn das Letzte handle zu der job wird geschlossen.Es vielleicht doch existiert eine Lösung zum konfigurieren von WinRM für support jobs, die unterstützt
JOB_OBJECT_LIMIT_BREAKAWAY_OK
.Bearbeitet :
So Lesen In der Microsoft-Dokumentation, ich fand eine dokumentierte technische Möglichkeit für Sie, ein Programm zu starten, über WinRM aber in einem onother job. Standardmäßig erstellte Prozesse mit CreateProcess einen Prozess im Zusammenhang mit einem Auftrag sind die im Zusammenhang mit der Arbeit; jedoch Prozesse erstellt mit "Win32_Process".Erstellen sind nicht die mit dem job verbunden.
So, wenn Sie in einer remote-Sitzung, die Sie erstellen, ein Prozess, WMI-so :
Beenden Sie die remote-Sitzung wsmprovhost.exe verschwunden, aber die neuen Verfahren bleiben auf dem server wie hier gezeigt unter :
Prozesse gestartet, die mit WMI nicht gehört zu jedem Job. In Französisch würde ich sagen "Ce qu' Il fallait démontrer"
PsExec -d
von außerhalb der remote-Sitzungen. Auf diese Weise, wenn die remote-Sitzung wird getötet der Prozess begann mitPsExec -d
ist nicht.Ich glaube, ich fand eine saubere Lösung, die ich bearbeitet habe, meine Antwort zu erklären.
Vielen Dank für die tolle post. Es ersparte mir weitere Stunden der Suche, wie Sie dies tun.
InformationsquelleAutor JPBlanc