nohup führt einen Prozess im Hintergrund aus. Gibt es ein Äquivalent für Windows?
nohup führt einen Prozess im Hintergrund aus. Gibt es ein Äquivalent für Windows?
Antworten:
Mit dem Befehl start können Sie einen Prozess im Hintergrund des Befehlsfensters ausführen.
command1
command2
start command3
command4
Befehl2 wartet, bis Befehl1 beendet ist, aber Befehl4 wartet nicht, bis Befehl3 beendet ist.
Wenn Sie unabhängig von dem angemeldeten Benutzer ausgeführt werden müssen, müssen Sie den Prozess als Dienst starten und können anysrv.exe verwenden
exec(<some windows executable>)
. Ich kann im Process Explorer deutlich die Eltern-Kind-Beziehung erkennen und alles, was ich von innen beginne, exec()
überlebt nicht. Korrigieren Sie, dass es zu funktionieren scheint, wenn ich ein cmd.exe
Startmenü starte, in dem der gestartete Prozess beim Beenden "korrekt" verwaist zu sein scheint cmd.exe
. Klar muss ich das besser verstehen. :-(
Vielleicht möchten Sie sich Windows-Dienste ansehen. Es gibt einige Tools, die Sie herunterladen können, um einen beliebigen Prozess als Windows-Dienst zu hosten. Dies führt dazu, dass der Prozess beim Start von Windows im Hintergrund geladen wird. Sofern keine Benutzerinteraktion erforderlich ist, sollten Sie ihn so hosten können.
Windows Server 2003 Resource Kit
Das Tool, nach dem Sie suchen, heißt srvany.exe.
Die einzige Möglichkeit in Windows, einen Prozess von einem Benutzer starten zu lassen, der nach dem Abmelden weiter ausgeführt wird (dh was "nohup" tut), besteht darin, ihn entweder über eine "geplante Aufgabe" oder als Windows-Dienst zu starten. Wenn sich der Benutzer abmeldet, werden alle Prozesse in seiner Anmeldesitzung beendet.
Wenn Sie die Methode "Geplante Aufgaben" ausprobieren möchten, möchten Sie wissen, wie Sie sie programmgesteuert erstellen. Die WMI-Klasse Win32_ScheduledJob kann dies tun. Die Dokumentation finden Sie hier im Detail: http://www.microsoft.com/technet/scriptcenter/guide/sas_man_rsxs.mspx?mfr=true Grundsätzlich möchten Sie Folgendes tun (schamlos von Microsoft gestohlen):
Set objService = GetObject("winmgmts:\\.")
Set objNewJob = objService.Get("Win32_ScheduledJob")
errJobCreated = objNewJob.Create("Program-to-execute.exe", "ugly-formatted-time-string-per-Microsoft-docs",True ,1 OR 4 OR 16, , ,JobID)
If Err.Number = 0 Then
Wscript.Echo "New Job ID: " & JobID
Else
Wscript.Echo "An error occurred: " & errJobCreated
End If
Um "Joe User" die Möglichkeit zu geben, geplante Aufgaben zu erstellen, müssen Sie die Berechtigung für den Ordner% SystemRoot% \ Tasks ändern. Hier finden Sie einige Informationen zu diesem Thema: http://technet.microsoft.com/en-us/library/cc785125(WS.10).aspx
Dies alles hängt davon ab, was Ihr letztendlicher Zweck ist. Sie können eine geplante Aufgabe mit der Option ausführen, die nur ausgeführt werden soll, wenn der Benutzer auf Deaktiviert eingestellt ist. Sie könnten möglicherweise psexec von einem entfernten Computer aus verwenden. Besser noch könnte es sein, den Prozess als Service auszuführen. Überprüfen Sie diese Google-Suche , diese andere Google-Suche , diesen Thread und diesen anderen Thread auf mögliche Hinweise bei Ihrer Suche nach einer Lösung. Letztendlich scheint es auf einem Windows-Computer kein genaues Äquivalent zu nohup zu geben.
START
weiß , führt der Befehl keine Trennung durch, dh er ist immer noch ein untergeordnetes Element des Prozesses, der ihn erstellt hat. In Ihrem Beispiel bedeutet dies, dass 'command3' stirbt, wenn der Mutterprozess beendet wird. Unix umgeht dies, indem es als "Gabel-zweimal" bezeichnet wird, aber ich kenne kein Äquivalent in Windows.