Est-il possible d'exécuter des processus en arrière-plan dans Windows? équivalent nohup pour windows

Réponses:

8

Vous pouvez utiliser la commande de démarrage pour exécuter un processus en arrière-plan de la fenêtre de commande.

command1
command2
start command3
command4

command2 attend la fin de command1 mais command4 n'attend pas que command3 se termine.

et si vous devez exécuter indépendamment de l'utilisateur connecté, vous devez démarrer le processus en tant que service et vous pouvez utiliser anysrv.exe

Aragorn
la source
Autant que je sache, la STARTcommande ne fait pas de détachement, c'est-à-dire qu'elle est toujours un enfant du processus qui l'a créée. Dans votre exemple, cela signifiera que «command3» mourra chaque fois que le processus mère se terminera. Unix contourne cela en le faisant était connu comme un 'fork-deux fois' mais je ne connais pas d'équivalent dans Windows.
unixhacker2010
au moins sur Windows 7, la commande3 ne mourra PAS, par exemple, vous pouvez entrer dans une invite cmd "démarrer le bloc-notes" puis quitter et le bloc-notes sera toujours en cours d'exécution
Aragorn
Oui, vous avez raison. Cependant, je testais à partir d'une autre langue où tout ce que je peux exec(<some windows executable>). Je peux voir clairement dans Process Explorer la relation parent-enfant et tout ce que je commence de l'intérieur exec()ne survit pas. Corrigez qu'il semble fonctionner si je démarre un cmd.exemenu Démarrer où le processus démarré semble être orphelin «correctement» à la cmd.exesortie. De toute évidence, je dois mieux comprendre cela. :-(
unixhacker2010
6

Vous voudrez peut-être regarder les services Windows. Il existe des outils que vous pouvez télécharger pour héberger n'importe quel processus en tant que service Windows. Cela provoque le chargement du processus en arrière-plan au démarrage de Windows, donc à condition qu'il ne nécessite pas d'interaction avec l'utilisateur, vous devriez pouvoir l'héberger comme ceci.

Kit de ressources Windows Server 2003

L'outil que vous recherchez s'appelle srvany.exe.

Spence
la source
5

La seule façon, sous Windows, qu'un processus démarré par un utilisateur continue de s'exécuter après la fermeture de session (c'est-à-dire ce que fait "nohup") est de le démarrer soit via une "tâche planifiée" soit en tant que service Windows. Lorsque l'utilisateur se déconnecte, tous les processus de sa session de connexion sont supprimés.

Si vous êtes prêt à essayer la méthode "Tâches planifiées", vous voudrez savoir comment les créer par programme. La classe WMI Win32_ScheduledJob peut le faire. La documentation est fournie en détail ici: http://www.microsoft.com/technet/scriptcenter/guide/sas_man_rsxs.mspx?mfr=true Fondamentalement, vous cherchez à faire (sans vergogne volé à Microsoft):

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

Pour accorder à "l'utilisateur joe" la possibilité de créer des tâches planifiées, vous devrez modifier l'autorisation sur le dossier% SystemRoot% \ Tasks. Voir ici pour quelques informations à ce sujet: http://technet.microsoft.com/en-us/library/cc785125(WS.10).aspx

Evan Anderson
la source
Quel est l'avantage de faire cela par rapport à l'utilisation de schtasks.exe ou de l'interface graphique du Planificateur de tâches?
Helvick
Il n'y a pas beaucoup de différence fonctionnelle entre cette API et schtasks.exe. L'avantage de l'interface graphique est que vous pouvez le faire par programme.
Evan Anderson
0

Tout dépend de votre objectif ultime. Vous pouvez exécuter une tâche planifiée avec l'option de s'exécuter uniquement si l'utilisateur est connecté défini sur DÉSACTIVÉ. Vous pouvez éventuellement utiliser psexec à partir d'une machine distante. Mieux encore pourrait être d'exécuter le processus en tant que service. Consultez cette recherche Google , cette autre recherche Google , ce fil et cet autre fil pour trouver des pistes possibles dans votre recherche d'une solution. En fin de compte, il semble qu'il n'y ait pas d' équivalent exact à nohup sur une machine Windows.

Wesley
la source
Mon but ultime est de cacher le processus à l'utilisateur. Cachez les fenêtres qu'il fait apparaître.
Jader Dias