Saya baru saja mengajukan pertanyaan tentang proses forking tidur di backgroud.
Notasi yang saya kemukakan terlihat seperti ini:
sleep 10 && echo "hello world" &
Jawaban untuk pertanyaan yang berbeda ini menggunakan format yang berbeda.
( sleep 10 ; echo "hello world" ) &
Saya tahu itu &&
hanya memungkinkan proses kedua untuk memulai jika yang pertama mengembalikan true. Bisakah tidur gagal? Apakah ada situasi di mana saya harus lebih suka yang satu daripada yang lain?
shell
background-process
sleep
Baarn
sumber
sumber
Jawaban:
Tidur dapat gagal jika diakhiri selama eksekusi:
Karena sleep adalah executable eksternal, dapat dipastikan bahwa fork atau exec panggilan bisa gagal, yang juga akan menyebabkan bash menghasilkan kode kesalahan> 0.
sumber
a; b
selalu menjalankan perintah kedua setelah yang pertama, sedangkana && b
menjalankan perintah kedua hanya jika yang pertama berhasil, yaitu hanya jika perintah pertama mengembalikan status 0.sleep
selalu mengembalikan status 0, kecuali ketika terbunuh oleh sinyal, dalam hal ini statusnya 128 + nomor sinyal. (Statusnya juga bisa 126 atau 127 jikasleep
perintah tidak ada atau program tidak dapat memulai karena kurangnya sumber daya, tetapi Anda sangat tidak mungkin menemukan kasus ini.)Dengan demikian, Anda harus menggunakan
;
atau&&
bergantung pada apa yang Anda inginkan terjadi jika tidur terganggu:sleep 10; echo hello
mencetak pesan setelah 10 detik (lebih sedikit jikasleep
terbunuh oleh sinyal);sleep 10 && echo hello
mencetak pesan setelah 10 detik, tetapi tidak mencetak apa pun jikasleep
terbunuh oleh sinyal.sumber
Anda harus berasumsi bahwa perintah apa pun dapat gagal karena berbagai alasan bahkan jika mengalami kegagalan tidur memang sangat tidak mungkin.
berarti tidur latar belakang dan menjalankan gema setelah proses tidur tetapi jika tidur gagal gema akan tetap berjalan lihat penjelasan lengkap
berarti Anda harus menunggu akhir tidur sebelum menggemakan apa pun dan jika gema gagal proses berhenti tetapi seluruh perintah juga dilatar belakangi. lihat penjelasan lengkap
Kesimpulan
sintaks pertama adalah skrip shell yang berarti itu mempertimbangkan instruksi secara terpisah sebagai daftar.
Opsi kedua menggunakan && berarti DAN jadi jika Anda menggunakannya dari perintah pertama gagal maka yang kedua tidak akan dieksekusi.
Ini hanya perilaku yang berbeda dalam menangani kesalahan.
sumber