nohup ejecuta un proceso en segundo plano. ¿Hay algún equivalente para Windows?
nohup ejecuta un proceso en segundo plano. ¿Hay algún equivalente para Windows?
Respuestas:
Puede usar el comando de inicio para ejecutar un proceso en el fondo de la ventana de comandos.
command1
command2
start command3
command4
el comando2 espera hasta que termine el comando1 pero el comando4 no espera que el comando3 termine.
y si necesita ejecutar independientemente del usuario conectado, debe iniciar el proceso como un servicio y puede usar anysrv.exe
exec(<some windows executable>)
. Puedo ver claramente en Process Explorer la relación padre-hijo y todo lo que empiezo desde dentro exec()
no sobrevive. Corrija que parece funcionar si inicio un cmd.exe
menú Inicio donde el proceso iniciado parece quedar huérfano 'correctamente' cuando cmd.exe
sale. Claramente necesito entender esto mejor. :-(
Es posible que desee ver los servicios de Windows. Hay algunas herramientas que puede descargar para alojar cualquier proceso como un servicio de Windows. Esto hace que el proceso se cargue en segundo plano al iniciar Windows, por lo que siempre que no requiera la interacción del usuario, debería poder alojarlo de esta manera.
Kit de recursos de Windows Server 2003
La herramienta que busca se llama srvany.exe.
La única forma, en Windows, de que un usuario pueda iniciar un proceso que continúa ejecutándose después del cierre de sesión (es decir, lo que hace "nohup") es iniciarlo a través de una "tarea programada" o como un servicio de Windows. Cuando el usuario cierra la sesión, todos los procesos en su sesión de inicio de sesión se eliminarán.
Si quieres probar el método de "Tareas programadas", querrás saber cómo crearlas mediante programación. La clase WMI Win32_ScheduledJob puede hacerlo. La documentación se proporciona en detalle aquí: http://www.microsoft.com/technet/scriptcenter/guide/sas_man_rsxs.mspx?mfr=true Básicamente, lo que está buscando es hacer (descaradamente robado de 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
Para conceder al "usuario joe" la capacidad de crear tareas programadas, deberá modificar el permiso en la carpeta% SystemRoot% \ Tasks. Consulte aquí para obtener información sobre ese frente: http://technet.microsoft.com/en-us/library/cc785125(WS.10).aspx
Todo esto depende de cuál sea su propósito final. Puede ejecutar una tarea programada con la opción de ejecutar solo si el usuario ha iniciado sesión configurado en DESACTIVADO. Posiblemente podría usar psexec desde una máquina remota. Mejor aún podría ser ejecutar el proceso como un servicio. Eche un vistazo a esta búsqueda de Google , esta otra búsqueda de Google , este hilo y este otro hilo para encontrar posibles clientes potenciales en su búsqueda de una solución. En última instancia, parece que no hay un equivalente exacto de nohup en una máquina con Windows.
START
comando no se separa, es decir, sigue siendo un elemento secundario del proceso que lo creó. En su ejemplo, significará que 'command3' morirá cada vez que finalice el proceso madre. Unix evita esto haciendo que se conozca como un "tenedor dos veces", pero no sé de un equivalente en Windows.