Di CLI, kadang-kadang perintah yang saya ketik membutuhkan waktu untuk diselesaikan, dan kadang-kadang saya tahu kapan itu akan terjadi. Saya agak bingung tentang "latar belakang" dan semacamnya di Linux.
Apa cara yang paling umum (atau cara yang ramah pengguna) untuk mengatakan pada CLI bahwa saya tidak ingin menunggu, tolong beri saya kembali prompt saya segera. Dan jika itu bisa memberi saya progress bar atau hanya pemintal sibuk, itu akan bagus!
Jawaban:
Sebelum menjalankan perintah, Anda dapat menambahkan
&
ke baris perintah untuk dijalankan di latar belakang:Setelah memulai perintah, Anda dapat menekan CtrlZuntuk menangguhkannya, dan kemudian
bg
meletakkannya di latar belakang:sumber
find ...
perintah Anda terlebih dahulu, kemudian jalankan di latar belakang. Dalam hal ini Anda kehilangan-name
opsi.Ini adalah favorit semua karena selain mengirim proses ke latar belakang Anda tidak perlu khawatir tentang output teks mengotori terminal Anda:
Ini tidak hanya menjalankan proses di latar belakang, juga menghasilkan log (dipanggil
nohup.out
di direktori saat ini, jika itu tidak mungkin, direktori home Anda) dan jika Anda menutup / logout shell saat ini proses tidak terbunuh dengan mencegah proses anak dari menerima induk memberi sinyal ketika terbunuh (mis. logout, dengan SIGHUP ke induk, atau menutup shell saat ini).Ada yang disebut lain
disown
tetapi itu lebih merupakan perpanjangan dari jawaban lain daripada metode itu sendiri:Perintah-perintah ini tidak memungkinkan Anda untuk dengan mudah memulihkan output proses kecuali jika Anda menggunakan cara peretasan untuk menyelesaikannya.
sumber
nohup
shell kontrol pekerjaan itu konyol. Kerang modern tidak mengirimHUP
ke proses latar belakang. Mengarahkan ulang ke nama file unik adalah harga yang murah untuk dibayar.command > file.log 2>&1 & disown
sedikit lebih lama darinohup command &
tapi saya kira itulah yang menyarankan @chicks.Ini mungkin yang Anda inginkan
my_command > output.log 2>&1 &
ini akan memulai perintah Anda, mengarahkan ulang stdout dan stderr ke beberapa
output.log
yang dapat Anda tentukan. Jika Anda tidak peduli untuk menyimpan hasilnya sama sekali - Anda dapat menggunakan/dev/null
file yang sebenarnya.&
akan menjalankan perintah di latar belakang sehingga Anda dapat melanjutkan memasukkan perintah saat sedang berjalan.2>&1
mengarahkan ulang stderr ke stdout sehingga semua output tertangkap.juga, ketika Anda menjalankan perintah seperti ini, Anda harus mendapatkan konfirmasi dari kernel yang mirip dengan ini:
[2] 1234
Ini berarti bahwa proses Anda sedang berjalan di latar belakang dan id-nya1234
, sehingga Anda dapat membunuhnya nanti jika Anda ingin dengankill -9 1234
sumber
2>&1
sangat penting karena perintah dapat gagal dan coba output kesalahan dalam beberapa kasus!Lihatlah ke layar atau tmux . Contoh dengan
tmux
:Sementara jawaban lain menggunakan '&' ke latar belakang akan berfungsi, Anda harus mengarahkan ulang stdout (dan stderr!). Tanpa melakukan itu, output akan langsung menuju shell Anda, bercampur dengan output lain yang mungkin Anda miliki.
Backgrounding juga akan gagal jika Anda menjalankan perintah panjang dan logout atau terputus. Sistem akan mematikan pekerjaan Anda.
Jika Anda tidak terbiasa dengan layar atau tmux, pada dasarnya mereka memungkinkan Anda untuk melepaskan sepenuhnya dari shell Anda. Alih-alih latar program Anda, Anda latar belakang seluruh shell. Anda kemudian dapat beralih kembali nanti, bahkan dari komputer lain. Keduanya memiliki banyak fitur yang Anda mungkin atau mungkin tidak menemukan manfaat di luar use case ini.
Layar adalah program yang lama dicoba dan benar; tmux jauh lebih muda tetapi telah belajar dari masa lalu layar.
sumber
(Untuk kelengkapan-- sudah dijawab :) Anda meletakkan perintah di latar belakang dengan menambahkan
&
setelah perintah:Saya menambahkan jawaban ini untuk menjawab bagian lain dari pertanyaan Anda:
Tidak ada padanan sebenarnya dari spinner untuk menampilkan perintah latar belakang yang sedang berjalan, tetapi Anda dapat melihat status perintah latar belakang dengan mengetik
jobs
ataujobs -l
. Ini akan menunjukkan kepada Anda perintah latar belakang Anda, dan apakah itu sedang berjalan, berhenti melalui sinyal (misalnya, dengan^Z
), atau kadang-kadang berhenti karena mereka sedang menunggu input interaktif dari Anda.sumber
long_command with arguments &> redirection &
untuk mengarahkan kembalistderr
jugaAnda dapat menjalankan program di latar belakang menggunakan
&
. Misalnya, jika Anda ingin menjalankanyum install XyZ
misalnya, Anda dapat menjalankan:The
stdout
atau output dari program ini dapat diarahkan menggunakan>
menimpa sebuah file, atau>>
untuk menambahkan ke sebuah file. Misalnya, jika Anda ingin masukyum
fileyum.log
:Atau, jika Anda ingin menambahkan output ke file yang ada
log
:Kesalahan dicetak ke
stderr
dan bukanstdout
, dan dapat diarahkan ke file dengan cara yang sama, tetapi menggunakan2>
:Jika Anda ingin mengarahkan ulang keduanya
stderr
danstdout
, Anda dapat menggunakan&>
:sumber
Anda dapat menjalankan perintah di latar belakang hanya dengan meletakkan
&
tanda setelahnya.Sebagai contoh:
akan menjalankannya di latar belakang.
Anda selanjutnya dapat mengarahkan stdout / stderr ke file yang sesuai sehingga tidak muncul di terminal Anda saat Anda melakukan sesuatu.
Lihat ini untuk info lebih lanjut: http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-3.html
sumber
Coba gunakan perintah 'layar' sebelum Anda memulai tugas yang sudah berjalan lama kemudian ketika Anda melepaskannya Anda dapat memasang kembali kembali ke dengan 'layar -r -d' kapan pun Anda perlu. Saya menemukan bahwa ketika menggunakan terminal melalui ssh atau koneksi jaringan lain mereka kadang-kadang bisa rusak oleh koneksi yang buruk ke server. menjalankannya di dalam 'layar' memperbaiki masalah ini.
sumber