Pertama-tama; setelah Anda memulai suatu proses, Anda dapat melatar belakanginya dengan terlebih dahulu menghentikannya (tekan Ctrl- Z) dan kemudian mengetik bg
untuk membiarkannya melanjutkan di latar belakang. Sekarang "pekerjaan", dan stdout
/ stderr
/ stdin
masih terhubung ke terminal Anda.
Anda dapat memulai proses sebagai latar belakang segera dengan menambahkan "&" di akhir:
firefox &
Untuk menjalankannya di latar yang dibungkam, gunakan ini:
firefox </dev/null &>/dev/null &
Beberapa info tambahan:
nohup
adalah sebuah program yang dapat Anda gunakan untuk menjalankan aplikasi Anda sehingga stdout / stderr dapat dikirim ke file sebagai gantinya dan dengan demikian menutup skrip induk tidak akan SIGHUP anak. Namun, Anda harus memiliki pandangan ke depan untuk menggunakannya sebelum Anda memulai aplikasi. Karena cara nohup
kerjanya, Anda tidak bisa hanya menerapkannya pada proses yang sedang berjalan .
disown
adalah bash builtin yang menghilangkan pekerjaan shell dari daftar pekerjaan shell. Apa artinya ini pada dasarnya adalah bahwa Anda tidak dapat menggunakan fg
, bg
di atasnya lagi, tetapi yang lebih penting, ketika Anda menutup shell Anda tidak akan menggantung atau mengirim SIGHUP
ke anak itu lagi. Berbeda nohup
, disown
digunakan setelah proses telah diluncurkan dan dilatar belakangi.
Yang tidak bisa Anda lakukan, adalah mengubah stdout / stderr / stdin dari suatu proses setelah diluncurkan. Paling tidak dari shell. Jika Anda meluncurkan proses Anda dan memberi tahu bahwa stdout adalah terminal Anda (yang merupakan apa yang Anda lakukan secara default), maka proses itu dikonfigurasi untuk menghasilkan output ke terminal Anda. Shell Anda tidak memiliki urusan dengan penyiapan FD proses, itu murni sesuatu yang dikelola sendiri oleh proses itu. Proses itu sendiri dapat memutuskan apakah akan menutup stdout / stderr / stdin atau tidak, tetapi Anda tidak dapat menggunakan shell Anda untuk memaksanya melakukannya.
Untuk mengelola hasil proses latar belakang, Anda memiliki banyak opsi dari skrip, "nohup" mungkin menjadi yang pertama muncul di benak Anda. Tetapi untuk proses interaktif Anda mulai tetapi lupa untuk membungkam ( firefox < /dev/null &>/dev/null &
) Anda tidak bisa berbuat banyak, sungguh.
Saya sarankan Anda mendapatkan GNU screen
. Dengan layar Anda dapat menutup shell yang sedang berjalan saat output proses menjadi masalah dan membuka yang baru ( ^Ac
).
Oh, dan omong-omong, jangan gunakan " $@
" di mana Anda menggunakannya.
$@
berarti, $1
, $2
, $3
..., yang akan mengubah perintah Anda ke:
gnome-terminal -e "vim $1" "$2" "$3" ...
Itu mungkin bukan yang Anda inginkan karena -e hanya membutuhkan satu argumen. Gunakan $1
untuk menunjukkan bahwa skrip Anda hanya dapat menangani satu argumen.
Sangat sulit untuk mendapatkan beberapa argumen yang berfungsi dengan baik dalam skenario yang Anda berikan (dengan gnome-terminal -e
) karena -e
hanya membutuhkan satu argumen, yang merupakan string perintah shell. Anda harus menyandikan argumen Anda menjadi satu. Cara terbaik dan paling kuat, tetapi agak kasar, adalah seperti ini:
gnome-terminal -e "vim $(printf "%q " "$@")"