Estoy trabajando en algunos scripts por lotes relacionados con lo siguiente:
- Ejecutar algunos subprocesos que no terminan (asincrónicamente)
- Espera a t segundos
- Realizar otra tarea X por algún tiempo
- Terminar subprocesos
Idealmente, me gustaría poder diferenciar el stdout de los subprocesos que se ha emitido antes
Se me ocurren algunas ideas, aunque no tengo ni idea de cómo las implementaría:
- Descartar salida estándar para t segundos
- Inserte texto (por ejemplo, "Tarea X iniciada") para separar visualmente las secciones
- Dividir stdout en varios flujos de salida
Respuesta aceptada:
Si bien podría complicar el asunto con exec
y disputas adicionales de descriptores de archivos, su segunda sugerencia es la más simple. Antes de empezar X , echo
una cadena de marcador en el archivo de registro.
Todos esos comandos se agregarían al mismo archivo, por lo que tal vez sería una buena idea anteponer todos los resultados de X con un marcador, para que pueda distinguir su salida de la de los comandos anteriores que aún se están ejecutando. Algo como:
{ X; } | sed 's,^,[X say] ,'
Esto simplificaría mucho más el análisis. No es seguro y para programas muy detallados, las condiciones de carrera ocurrirían a menudo.
Si está dispuesto a correr el riesgo de romper una línea de registro y puede interrumpir el primer lote de aplicaciones sin consecuencias, esto también funcionaría:
{ Y; } >> log &
sleep $t
kill -STOP %% # last job, like the same as %1
echo -e "nX started" >> log
kill -CONT %%
{ X; } >> log2