Apa arti simbol ampersand (&) dengan `nohup`?

11

Saya telah melihat banyak contoh di mana a &mengikuti akhir dari string perintah, tetapi saya tidak bisa menemukan penjelasan tentang apa yang dilakukannya. Ini bahkan tidak di nohup's manhalaman. Apakah ini masalah shell?

Baik menggunakan &atau tidak, saya menemukan bahwa proses apa pun yang dijalankan nohuptampaknya menunjukkan kekebalan terhadap sinyal hangup.

Chad Harrison
sumber
1
"Saya menemukan bahwa setiap proses yang dijalankan dengan nohup tampaknya menunjukkan kekebalan terhadap sinyal hangup." Itulah gunanya nohup.
Samuel Edwin Ward
Ok, jadi izinkan saya mengklarifikasi: satu-satunya contoh yang saya lihat menggunakan &, jadi saya tidak yakin apakah &itu semacam pengubah atau argumen yang membuat nohupberperilaku berbeda.
Chad Harrison
1
Itu hal yang wajar untuk dicurigai. Sebenarnya ia tidak mengubah perilaku nohup (nohup bahkan tidak bisa melihatnya) tetapi memodifikasi perilaku shell.
Samuel Edwin Ward
nohup & -> Tidak Ada Hangup dan latar belakangnya. Dari masa lalu yang baik dari modem dan terminal serial. Ketika terminal dan modem saya offline, terus memproses ini di latar belakang sehingga pekerjaan selesai ketika saya pergi online.
Fiasco Labs

Jawaban:

19

Dari halaman bash :

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

Jadi ya, itu masalah shell, dan dapat digunakan dengan perintah apa pun. Ini pada dasarnya mengembalikan kontrol kepada Anda segera dan memungkinkan perintah untuk menyelesaikan di latar belakang. Ini hampir selalu digunakan nohupkarena Anda biasanya ingin keluar dari shell setelah memulai perintah.

Mgorven
sumber
4
Saya telah melihat Anda memposting banyak jawaban bagus akhir-akhir ini dan otak saya selalu menerjemahkan nama pengguna Anda ke McGuyver. Tidak yakin mengapa saya merasa perlu memberi tahu Anda hal ini.
MDMarra
1
@MDMarra Saya akan menganggap itu sebagai pujian ;-)
mgorven
1
@MDMarra Setidaknya Anda tidak berpikir: "McGruber"
Ward - Reinstate Monica
7

Menggunakan ampersand (&) akan menjalankan perintah dalam proses anak (anak ke sesi bash saat ini). Namun, ketika Anda keluar dari sesi, semua proses anak akan terbunuh.

menggunakan nohup + ampersand (&) akan melakukan hal yang sama, kecuali bahwa ketika sesi berakhir, induk dari proses anak akan diubah menjadi "1" yang merupakan proses "init", sehingga menjaga anak dari terbunuh.

Michel
sumber
3

Ya, ini masalah shell - ia menjalankan perintah di latar belakang sehingga Anda tidak perlu menunggu perintah saat ini kembali sebelum mengeluarkan lebih banyak perintah.

rampok
sumber