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.
&
dan&&
:&
mengeksekusi perintah pertama di latar belakang;&&
menjalankan perintah pertama dan melanjutkan ke yang kedua secara bersyarat jika berhasil keluar.Jawaban:
The
&
membuat perintah berjalan di latar belakang.Dari
man bash
:sumber
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 **
sumber
nohup
akan membuat proses tetap hidup juga.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.
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:
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 .
sumber
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 digunakanSIG_IGN
untuk mengabaikan semua sinyal atauSIG_DFL
mengembalikan 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.sumber