Saya hanya ingin tahu, misalnya ketika saya memulai qtox
dengan:
qtox &
Dan kemudian tutup Terminal, qtox
tutup dengan itu. Namun saat berjalan etherape
menggunakan:
sudo etherape &
Closing Terminal tidak menutup atau menyebabkan masalah pada Etherape. Dan di antara aplikasi yang berbeda ada perilaku yang berbeda, beberapa tutup ketika Terminal tidak, yang lain tidak, bagaimana bisa? Mengapa beberapa orang tutup ketika yang lain tidak? Saya menjalankan Ubuntu GNOME 15.10 dengan GNOME 3.18.
qtox
keluar ketika Anda menutup terminal, Anda selalu dapat menjalankannyanohup qtox &
.Jawaban:
Ketika Anda menutup terminal, terminal mengirimkan sinyal SIGHUP ke shell; shell, pada gilirannya, mengirimkan sinyal SIGHUP ke semua kelompok proses anak-anaknya, yang mencakup kelompok proses berlatar belakang;
Bagaimana setiap proses akan bereaksi terhadap sinyal sepenuhnya tergantung pada proses: jika proses tidak mendefinisikan handler untuk sinyal dan memberi tahu kernel (melalui beberapa syscall seperti
signal()
atausigaction()
) bahwa ia ingin menanganinya, kernel mengeksekusi pengendali default untuk sinyal, yang dalam hal sinyal SIGHUP terdiri dalam mengakhiri proses.Namun, ketika Anda menjalankan perintah
sudo
, UID darisudo
proses dan proses anaknya diatur ke0
(root); secara umum, kecuali UID dari proses pengiriman sinyal adalah0
(root) atau sama dengan proses target, kernel menolak sinyal (yaitu: suatu proses tidak dapat mengirim sinyal ke proses yang dimiliki oleh pengguna lain, kecuali proses mengirim sinyal dimiliki oleh root); itu sebabnya proses yang dijalankan oleh pengguna seperti instance Bash yang dijalankan oleh terminal tidak dapat SIGHUPsudo
proses dan, akhirnya, menutup terminal tidak mempengaruhi proses yang dimulai dengansudo
.sumber
nohup
di depan perintah-perintah yang dekat dengan SIGHUP :) Disegangkansudo
.sudo
hanya menjalankan perintah sebagai pengguna lain dan Anda tidak dapat mengirim sinyal ke proses pengguna lain. Lihatman 2 kill
.sudo
semacam orang miskinnohup
?sudo
dengansudo
untuk efeknohup
sampingnya, mempertimbangkan semua kerugian lainnya.nohup
, itu membuatnohup.out
file yang tidak dibutuhkan setelahnya. Alih-alih menggunakandisown
perintah builtin.