Misalnya, ketika saya mengetik ping 8.8.8.8 &, mengapa kita bisa melihat proses ping berfungsi? Dan ketika saya mengetik find / -name '*test*' &, itu juga terlihat di monitor.
Mengapa demikian? Apakah itu tidak benar-benar di latar belakang?
Misalnya, ketika saya mengetik ping 8.8.8.8 &, mengapa kita bisa melihat proses ping berfungsi? Dan ketika saya mengetik find / -name '*test*' &, itu juga terlihat di monitor.
Mengapa demikian? Apakah itu tidak benar-benar di latar belakang?
Jawaban:
The &mengarahkan shell untuk menjalankan perintah di latar belakang, yaitu, itu bercabang dan berjalan dalam sub-shell terpisah, sebagai pekerjaan, asynchronous.
Perhatikan bahwa ketika Anda meletakkan &output - stdout dan stderr - masih akan dicetak ke layar . Jika Anda tidak ingin melihat output apapun pada layar, mengarahkan baik stdoutdan stderruntuk file dengan:
myscript > ~/myscript.log 2>&1 &
Biasanya Anda mungkin ingin membuangnya stderrdengan mengarahkan ulang ke /dev/nulljika Anda tidak khawatir menganalisis kesalahan nanti.
Anda bahkan dapat menjalankan perintah / skrip pada saat yang sama, di sub-shell terpisah. Untuk misalnya;
./script1 & ./script2 & ./script3 &
Pekerjaan latar belakang dapat dibawa kembali ke baris perintah sebelum selesai dengan perintah:
fg <job-number>
The job-numberdapat diperoleh dengan menjalankan
jobs
2>&1dialihkan stderrke stdout.
stty tostopakan menyebabkan pekerjaan latar belakang ditunda jika mereka mencoba menulis ke terminal.
Saat Anda menggunakan &, proses sedang berjalan di latar belakang. Tetapi output standarnya masih terminal.
Bahkan, Anda dapat menjalankan ping 8.8.8.8 &dan find / -name '*test*' &pada saat yang sama (menghasilkan output campuran), tetapi Anda tidak dapat menjalankan ping 8.8.8.8dan find / -name '*test*'pada saat yang sama pada shell yang sama.
Jika Anda tidak ingin melihat apa pun, gunakan sesuatu seperti ping 8.8.8.8 &> /dev/null &.
Selain itu, Anda mungkin ingin mempelajari nohupdan disown.
disowntidak mencegah keluaran dari dicetak ke terminal.
/dev/nullsebagai file untuk mengarahkan ulang keluaran terminal jika seseorang ingin membuang output alih-alih menyimpannya di suatu tempat. Dan aku benar bahwa2>&1pengalihanstderrkestdout? Mungkin Anda ingin mengklarifikasi itu juga ... Terima kasih.