Apa arti "&" di akhir perintah linux?

99

Saya seorang administrator sistem dan saya telah diminta untuk menjalankan skrip linux untuk membersihkan sistem.

Perintahnya adalah ini:

perl script.pl > output.log &

jadi perintah ini diakhiri dengan &tanda, apakah ada makna khusus darinya?

Saya memiliki pengetahuan dasar tentang shell tetapi saya belum pernah melihat ini sebelumnya.

Bung
sumber
maaf saya buruk, saya tahu tentang hal
Bung
3
Jika Anda berada di halaman ini mencari perbedaan antara &dan &&: &mengeksekusi perintah pertama di latar belakang; &&menjalankan perintah pertama dan melanjutkan ke yang kedua secara bersyarat jika berhasil keluar.
David Bodow

Jawaban:

151

The &membuat perintah berjalan di latar belakang.

Dari man bash:

Jika perintah diakhiri oleh operator kontrol & , shell menjalankan perintah di latar belakang dalam subkulit. Shell tidak menunggu perintah selesai, dan status kembaliannya adalah 0.

mgarciaisaia
sumber
13

Sebagai tambahan, Anda dapat menggunakan tanda "&" untuk menjalankan banyak proses melalui satu (1) koneksi ssh untuk menjaga jumlah terminal yang minimum. Misalnya, saya memiliki satu proses yang mendengarkan pesan untuk mengekstrak file, proses kedua mendengarkan pesan untuk mengunggah file: Menggunakan "&" Saya dapat menjalankan kedua layanan dalam satu terminal, melalui koneksi ssh tunggal ke server saya .


***** Saya baru menyadari bahwa proses yang berjalan melalui "&" juga akan "tetap hidup" setelah sesi ssh ditutup! lumayan rapi dan berguna jika koneksi ke server terputus **

Zack S
sumber
nohupakan membuat proses tetap hidup juga.
Jerry Chin
2
dengan & kita bisa mendapatkan PID juga sehingga kita bisa menghentikan proses jika kita mau dan juga kita bisa mengecek status proses itu
Dhaval Solanki
13

Jika tidak diberitahu sebaliknya, perintah mengambil alih latar depan. Anda hanya memiliki satu proses "latar depan" yang berjalan dalam satu sesi shell. Simbol & menginstruksikan perintah untuk dijalankan dalam proses latar belakang dan segera kembali ke baris perintah untuk perintah tambahan.

sh my_script.sh &

Proses latar belakang tidak akan tetap hidup setelah sesi shell ditutup. SIGHUP menghentikan semua proses yang sedang berjalan. Secara default. Jika perintah Anda berjalan lama atau berjalan tanpa batas waktu (misalnya: layanan mikro), Anda perlu melakukan pr-pend dengan nohup agar tetap berjalan setelah Anda memutuskan sambungan dari sesi:

nohup sh my_script.sh &

EDIT: Tampaknya ada area abu-abu mengenai penutupan proses latar belakang saat & digunakan. Ketahuilah bahwa shell dapat menutup proses Anda tergantung pada OS dan konfigurasi lokal Anda (terutama di CENTOS / RHEL): https://serverfault.com/a/117157 .

Timothy Jannace
sumber
3

Saya tidak tahu pasti tetapi saya sedang membaca buku sekarang dan yang saya dapatkan adalah bahwa sebuah program perlu menangani sinyalnya (seperti ketika saya menekan CTRL-C). Sekarang sebuah program dapat digunakan SIG_IGNuntuk mengabaikan semua sinyal atau SIG_DFLmengembalikan aksi default.

Sekarang jika Anda melakukannya $ command &maka proses ini berjalan sebagai proses latar belakang hanya mengabaikan semua sinyal yang akan terjadi. Untuk proses latar depan, sinyal ini tidak diabaikan.

Kaustubh Kislay
sumber