Sto lavorando su alcuni script batch che coinvolgono quanto segue:
- Esegui alcuni sottoprocessi non terminanti (in modo asincrono)
- Aspetta t secondi
- Esegui altre attività X per un po' di tempo
- Termina processi secondari
Idealmente, vorrei essere in grado di differenziare lo stdout dei sottoprocessi che è stato emesso prima X da ciò che è stato emesso dopo X .
Mi vengono in mente alcune idee, anche se non ho idea di come le implementerei:
- Elimina lo stdout per t secondi
- Inserisci del testo (ad esempio "Attività X iniziata") per separare visivamente le sezioni
- Dividi lo stdout in vari flussi di output
Risposta accettata:
Mentre potresti complicare la questione con exec
e discussioni aggiuntive sul descrittore di file, il tuo secondo suggerimento è il più semplice. Prima di iniziare X , echo
una stringa marcatore nel file di registro.
Tutti quei comandi verrebbero aggiunti allo stesso file, quindi forse sarebbe una buona idea anteporre tutto l'output di X con un marker, in modo da poter distinguere il suo output da quello dei comandi precedenti ancora in esecuzione. Qualcosa sulla falsariga di:
{ X; } | sed 's,^,[X say] ,'
Ciò renderebbe molto più semplici ulteriori analisi. Non è sicuro e per programmi molto dettagliati, le condizioni di gara si verificano spesso.
Se sei disposto a cogliere l'occasione per interrompere una riga di registro e puoi interrompere il primo batch di app senza conseguenze, anche questo funzionerebbe:
{ Y; } >> log &
sleep $t
kill -STOP %% # last job, like the same as %1
echo -e "nX started" >> log
kill -CONT %%
{ X; } >> log2