Ini adalah pemahaman saya tentang penggunaan &
, disown
dan nohup
:
<command>
: menjalankan proses dalambash
instance Terminal saat ini , di latar depan (yaitu proses terdaftar sebagaibash
pekerjaan latar depan danstdin
,stdout
danstderr
masih terikat ke terminal ); tidak kebal terhadap hangup ;<command> &
: menjalankan proses dalambash
instance Terminal saat ini , di latar belakang (yaitu proses terdaftar sebagaibash
pekerjaan latar belakang danstdin
,stdout
danstderr
masih terikat ke terminal ); tidak kebal terhadap hangup ;<command> & disown
: menjalankan proses dalambash
instance Terminal saat ini , di latar belakang , tetapi proses terlepas dari daftarbash
'pekerjaan' (yaitu proses tidak terdaftar sebagai pekerjaanbash
latar depan / latar belakang danstdin
,stdout
danstderr
masih terikat ke terminal ); kebal terhadap hangup ;nohup <command> & disown
: Menjalankan proses dalam Terminal saat inibash
misalnya, di latar belakang , tetapi proses ini terlepas daribash
daftar 's pekerjaan' (yaitu proses ini tidak terdaftar sebagaibash
foreground / latar belakang pekerjaan danstdin
,stdout
danstderr
yang tidak masih terikat ke terminal ) ; kebal terhadap hangup ;
Jadi, selain dari nohup <command> & disown
memblokir stdin
dan mengarahkan stdout
dan stderr
untuk nohup.out
secara default, tampaknya bagi saya seperti itu dapat dianggap benar-benar setara dengan <command> & disown
.
Apakah semua di atas benar? Adakah kesalahpahaman?
bash
instance orang tua tidak akan mematikan prosesJawaban:
Pemahaman Anda pada dasarnya benar. Keduanya
disown
dannohup
digunakan untuk memungkinkan Anda keluar dari sesi shell yang sedang berjalan tanpa menghentikan pekerjaan yang sedang berjalan. Beberapa klarifikasi:Tidak ada alasan untuk lari
nohup command & disown
,nohup
sudah akan menyangkal untuk Anda.nohup
adalah didefinisikan oleh POSIX sementaradisown
tidak . Ini berarti bahwa sementara banyak kerang (misalnyabash
,zsh
,ksh
) memilikinya, yang lain (misalnyatcsh
,csh
,dash
dansh
) akan tidak memilikinya.disown
dapat digunakan setelah perintah telah diluncurkan sementaranohup
harus digunakan sebelumnya.Sejauh yang saya tahu, efek sebenarnya dari kedua perintah itu sama. Mereka masing-masing memiliki fitur yang kurang dimiliki (lihat
help disown
danman nohup
) tetapi fungsi dasarnya sama, ya.Untuk diskusi yang jauh lebih terperinci tentang alat-alat ini dan perbedaan di antara mereka, lihat jawabannya di sini:
disown -h
dannohup
bekerja secara efektif sama?sumber
Nohup
dandisown
bukan hal yang sama dan menggunakan kedua perintah bersama TIDAK berlebihan. Lihat jawaban ini untuk uraian mendalamPoin pertama hingga ketiga Anda tampaknya baik-baik saja, meskipun
stdin, stdout and stderr are still bound to the terminal
bukan gagasan yang benar.stdin
selalu terikat ke terminal dalam arti bahwa Anda akan selalu memasukkan nama file ke perintah melalui terminal atau cara menggunakan terminal.stdout and stderr are still bound to the terminal
tidak apa-apa.Ada Anda
stdin, stdout and stderr are not still bound to the terminal
pada poin keempat yang tidak benar seperti yang disebutkan dalam paragraf saya sebelumnya. Juga di sini Anda menggunakan/dev/null
sebagai file input kecommand
, misalnya jika perintahnya adalahcat
, Anda menggunakannya sebagaicat /dev/null
.Perintah pada poin ke-5 Anda tidak diletakkan dengan benar, Anda menggunakan
nohup <command> & disown
, saat menggunakan salah satunohup
ataudisown
yang lain tidak diperlukan. Tujuannya sama (untuk mengabaikanSIGHUP
) tetapi fungsinya agak berbeda. Jadi perintah dapat disederhanakan sebagainohup <command> &
.sumber