Saya sedang mengerjakan beberapa skrip batch yang melibatkan hal berikut:
- Jalankan beberapa sub-proses yang tidak berhenti (secara asinkron)
- Tunggu t detik
- Lakukan tugas lain X untuk beberapa waktu
- Hentikan subproses
Idealnya, saya ingin dapat membedakan stdout dari sub-proses yang telah dipancarkan sebelum X dari apa yang telah dipancarkan setelah X .
Beberapa ide muncul di benak saya, meskipun saya tidak tahu bagaimana saya akan menerapkannya:
- Buang stdout untuk t detik
- Sisipkan beberapa teks (misalnya, 'Tugas X dimulai') untuk memisahkan bagian secara visual
- Pisahkan stdout menjadi berbagai aliran keluaran
Jawaban yang Diterima:
Meskipun Anda dapat memperumit masalah dengan exec
dan perselisihan deskriptor file tambahan, saran kedua Anda adalah yang paling sederhana. Sebelum memulai X , echo
string penanda ke dalam file log.
Semua perintah tersebut akan ditambahkan ke file yang sama, jadi mungkin ide yang baik untuk menambahkan semua output X dengan spidol, sehingga Anda dapat membedakan outputnya dari salah satu perintah sebelumnya yang masih berjalan. Sesuatu di sepanjang baris:
{ X; } | sed 's,^,[X say] ,'
Ini akan membuat analisis lebih lanjut menjadi lebih sederhana. Ini tidak aman dan untuk program yang sangat panjang lebar, kondisi balapan akan sering terjadi.
Jika Anda bersedia mengambil kesempatan untuk memecahkan satu baris log dan dapat mengganggu kumpulan pertama aplikasi tanpa konsekuensi, ini juga akan berhasil:
{ Y; } >> log &
sleep $t
kill -STOP %% # last job, like the same as %1
echo -e "nX started" >> log
kill -CONT %%
{ X; } >> log2