Gibt es eine Möglichkeit, Prozesse im Hintergrund in Windows auszuführen? Nohup-Äquivalent für Windows

12

nohup führt einen Prozess im Hintergrund aus. Gibt es ein Äquivalent für Windows?

Jader Dias
quelle

Antworten:

8

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

Aragorn
quelle
Soweit ich STARTweiß , 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.
Unixhacker2010
Zumindest unter Windows 7 stirbt der Befehl3 NICHT, zum Beispiel können Sie in eine cmd-Eingabeaufforderung "Notepad starten" gelangen, dann beenden und Notepad wird weiterhin ausgeführt
Aragorn
Ja, du hast recht. Ich habe jedoch in einer anderen Sprache getestet, in der ich nur kann 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.exeStartmenü starte, in dem der gestartete Prozess beim Beenden "korrekt" verwaist zu sein scheint cmd.exe. Klar muss ich das besser verstehen. :-(
unixhacker2010
6

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.

Spence
quelle
5

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

Evan Anderson
quelle
Was ist der Vorteil gegenüber der Verwendung von schtasks.exe oder der Taskplaner-GUI?
Helvick
Es gibt keinen großen funktionalen Unterschied zwischen dieser API und schtasks.exe. Der Vorteil der GUI ist, dass Sie dies programmgesteuert tun können.
Evan Anderson
0

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.

Wesley
quelle
Mein letztendlicher Zweck ist es, den Prozess vor dem Benutzer zu verbergen. Verstecke die Fenster, die es erzeugt.
Jader Dias