2011-02-19 21 views
8

Estoy buscando un método para controlar programas en un entorno Windows.¿Windows equivalente para "pantalla" de Linux u otra alternativa?

Preferiría que sea un poco similar al software de Linux "screen".

El motivo de mi búsqueda es que necesito iniciar un programa (en Windows) con un identificador, por lo que luego podría cerrar ese programa específico, sin cerrar nada más, aunque el programa real (.exe archivo) se ejecuta varias veces. Entonces, ¿de todos modos puedo "nombrarlo"?

estoy usando el ahora siguiendo en Linux:

$ screen <params> <id> ./softwareprogram 

en cuando sé que siempre se puede encontrar con su ID :)

Es un programa externo que está cerrando o iniciar un tercio programa de fiesta.

Mi programa está escrito en C++, si eso hace alguna diferencia.

Editar: ¿No puedo de ninguna manera elegir la ID yo mismo? ¿Como comenzar el programa con un nombre específico? Además, ¿cómo puedo matar el proceso al proporcionar un nombre?

+0

@Christian y @CodeInChaos; eso parece muy complicado. Además, si lo inicio con la función CreateProcess, ¿el programa iniciado muere cuando apago mi programa (o crash)? @Christian Me gustaría asignar un nombre a mí mismo.El programa en el que estoy trabajando no da el nombre, por lo que sería difícil saber quién es quién. El nombre proviene de una conexión TCP desde una máquina extranjera con su propia base de datos (la base de datos no está disponible para mi programa). Entonces, básicamente envía como "stop: program588" y luego quiero que mi programa detenga el programa con id "program588". Esta funcionalidad es muy fácil de obtener. –

Respuesta

1

Cuando inicia el programa, puede obtener su identificación de proceso, incluso en Windows. Más adelante puede usar esa identificación de proceso para volver a matar el programa.

Si necesita darle su propia identificación, entonces puede usar, p. Ej. el registro para almacenar una asignación de su ID para procesar la identificación. Si recibe un comando de inicio, almacene el identificador en el registro como clave y el pid del proceso iniciado como valor. Si recibe un comando de detención, recupere el pid del registro y elimine ese pid y elimine la clave del registro.

En lugar del registro se podría, por supuesto, también se utiliza una base de datos o una carpeta con archivos donde la clave (el identificador) es el nombre de archivo y el PID que está dentro de cada archivo

+0

Es mejor usar un identificador: los identificadores de procesos se pueden reutilizar, mientras que un identificador nunca se reutilizará a menos que lo cierre. Y no coloque datos que ni siquiera necesiten sobrevivir a un reinicio en el registro ಠ_ಠ – bdonlan

-2

Aunque no tengo ni idea de lo que el linux El comando screen sí lo hace, ¿por qué no usa simplemente el identificador de proceso que obtiene de CreateProcess?

También obtiene la id del proceso, pero solo es válida mientras haya manijas abiertas para ese proceso.

El parámetro lpProcessInformation contendrá tanto la identificación del proceso como la del proceso.

1

Por el momento, no creo que haya un equivalente nativo para la pantalla. Cygwin contiene una implementación de pantalla, pero viene con la sobrecarga de cygwin. El problema es que los sistemas operativos basados ​​en Windows y Posix implementan consolas de una manera muy diferente. Windows no admite muchas de las funciones tty que forman parte del entorno POSIX. Dicho esto, es posible escribir una implementación mínima de la funcionalidad en la utilidad de pantalla usando las llamadas API: AttachConsole y FreeConsole. Sin embargo, tendría que investigar un poco más sobre el tema.

Cuestiones relacionadas