2012-02-09 24 views
7

Estoy tratando de ejecutar tanto un servidor y cliente para ejecutar desde un archivo MAKE:La ejecución de dos procesos en paralelo desde makefile

objetivo:

./server& 
    ./client 

El problema es que el servidor & nunca se devuelve el control de nuevo aunque supongo que debería ejecutarse en segundo plano. Sigue escuchando al cliente que nunca se invoca ya que el archivo MAKE no parece recuperar el control del servidor. ¿Cómo puedo resolver este problema? sin escribir ningún objetivo adicional o scripts ?.

Saludos Vishal

Respuesta

1

server se ejecuta en segundo plano. Puede poner en primer plano usando el comando fg. Y luego matarlo con Ctrl-C

O tal vez este método: killall server

+0

Gracias chicos. Está funcionando ahora. El cambio fue que el cliente espera infinitamente que el servidor esté activo y luego haga que ejecute el cliente en segundo plano y el servidor en primer plano. ¡¡¡Gracias!!! –

+1

'fg' no funciona en contexto porque cada línea se ejecuta en un shell separado – Davide

9

Usted debe ser capaz de hacer esto mediante la combinación de los comandos en una sola línea:

target: 
    ./server& ./client 

consigue manos de líneas de comando a la shell ($(SHELL)) una línea a la vez.

Alternativamente, se podría definir dos objetivos independientes:

target: run_server run_client 

run_server: 
    ./server 
run_client: 
    ./client 

y ejecutar make con la opción -j para que sea paralelizar construir pasos:

make -j2 

Esto no parece la solución más natural para iniciando su programa (por ejemplo, para la prueba) pero funciona mejor cuando tiene un gran número de reglas de compilación que pueden construirse en parte en paralelo. (Para un poco más de control sobre make -s parallellization de objetivos, consulta

.NOTPARALLEL

Si .NOTPARALLEL se menciona como un objetivo, entonces esta invocación de maquillaje se llevará a cabo en serie, incluso si el ‘-j’ opción se da. Cualquier comando make de forma recursiva invocado seguirá funcionando recetas en paralelo (a menos que su makefile también contiene este objetivo). Cualquier requisitos previos en este objetivo se ignoran.

+1

@Eldar gracias por la corrección – sehe

+0

¡de nada! –

Cuestiones relacionadas