fatmawati achmad zaenuri/Shutterstock.com
Perintah Linux nohup memungkinkan proses penting tetap berjalan bahkan ketika jendela terminal yang meluncurkannya ditutup. Kami menunjukkan kepada Anda cara menggunakan perintah terhormat ini di Linux.
HUP dan SIGHUP
Unix hari ini, nenek moyang Linux, dibuat sebelum PC ditemukan. Komputer adalah peralatan yang besar dan mahal. Orang-orang berinteraksi dengan mereka melalui jalur serial baik secara lokal di dalam gedung yang sama atau dari jarak jauh melalui koneksi modem yang lambat. Awalnya, mereka mengetik instruksi mereka di teleprinter yang secara bertahap digantikan oleh terminal bodoh.
Mereka disebut bodoh karena kekuatan pemrosesan ada di komputer yang Anda sambungkan, bukan terminal tempat Anda mengetik. Program berjalan di komputer—di mana pun itu mungkin berada—dan bukan pada perangkat di meja Anda.
Jika terjadi sesuatu yang memutuskan sambungan antara terminal Anda dan komputer, komputer mendeteksi penurunan saluran dan mengirimkan HUP atau menutup sinyal ke program yang telah Anda jalankan. Program berhenti eksekusi ketika mereka menerima signal.
RELATEDCara Membunuh Aplikasi Desktop atau Proses Latar Belakang di Linux
Fungsi itu hidup di Linux hari ini. Pada PC Anda, jendela terminal adalah emulasi dari terminal fisik. Jika Anda menjalankan proses yang diluncurkan dari jendela terminal itu dan Anda menutup jendela itu, sinyal SIGHUP dikirim ke program sehingga mereka diberi tahu tentang HUP dan tahu bahwa mereka harus dihentikan.
Advertisement
Ada efek kaskade yang terjadi. Jika proses telah meluncurkan proses anak, SIGHUP juga diteruskan ke mereka sehingga mereka tahu bahwa mereka harus dihentikan.
Perintah nohup meluncurkan proses anak tetapi menolak untuk memberikan sinyal SIGHUP kepada mereka. Itu mungkin terdengar seperti masalah, tetapi sebenarnya itu adalah fungsi yang berguna.
Perintah nohup
Jika Anda ingin melanjutkan proses meskipun jendela terminal tempat peluncurannya ditutup, Anda memerlukan cara untuk mencegat SIGHUP agar program tidak pernah menerima dia. (Sebenarnya, jendela terminal tidak meluncurkan proses, mereka diluncurkan oleh sesi shell di dalam jendela terminal.) Solusi sederhana dan elegan untuk masalah itu adalah menempatkan proses lain di antara sesi shell dan program, dan memilikinya program lapisan tengah tidak pernah meneruskan sinyal SIGHUP.
Itulah yang dilakukan nohup. Ini meluncurkan program untuk Anda sehingga mereka adalah proses anak dari nohup, bukan proses anak dari shell. Karena mereka bukan proses anak dari shell, mereka tidak akan langsung menerima SIGHUP dari shell. Dan jika nohup tidak meneruskan SIGHUP kepada anak-anaknya, program tidak akan menerima SIGHUP sama sekali.
Ini berguna ketika, misalnya, Anda memiliki proses yang berjalan lama yang harus Anda biarkan berjalan sampai selesai. Jika Anda secara tidak sengaja menutup jendela terminal dan cangkangnya, Anda juga akan menghentikan prosesnya. Menggunakan nohup untuk meluncurkan proses mengisolasi proses dari sinyal nohup. Jika Anda bekerja dari jarak jauh di komputer melalui SSH dan Anda tidak ingin proses sensitif dihentikan jika koneksi jarak jauh gagal, Anda akan memulai proses di komputer jarak jauh dengan nohup .
Menggunakan nohup
Kami membuat program yang tidak melakukan sesuatu yang berguna, tetapi itu akan berjalan dan berjalan sampai dihentikan. Ini mencetak waktu ke jendela terminal setiap tiga detik. Ini disebut long-proc untuk "proses panjang."
./long-proc
Advertisement
Jika ini adalah program yang melakukan sesuatu yang berguna dan kami ingin itu terus berjalan bahkan jika jendela terminal dan shell ditutup, kami akan meluncurkannya dengan nohup .
nohup ./long-proc
Proses dipisahkan dari stdin dan stdout sehingga tidak dapat menerima input apa pun atau menulis ke jendela terminal. Juga, karena masih berjalan, Anda tidak kembali ke command prompt. Semua yang dilakukan nohup adalah membuat proses tersebut kebal terhadap penutupan terminal. Itu tidak mengubah proses menjadi tugas latar belakang.
Apakah Anda sekarang harus mem-boot ulang hanya untuk menghentikan proses? Tidak. Untuk menghentikan proses nohup yang belum Anda luncurkan sebagai proses latar belakang, tekan kombinasi tombol Ctrl+C.
Output dari program telah diambil untuk kami dalam file bernama “nohup.out.” Kami dapat meninjaunya dengan less.
less nohup.out
Apa pun yang biasanya akan dikirim ke jendela terminal ditangkap dalam file. Proses selanjutnya dari nohup akan ditambahkan ke file "nohup.out" yang ada.
Cara yang lebih berguna untuk menjalankan proses adalah dengan meluncurkannya dengan nohup sehingga tahan terhadap penutupan jendela terminal, dan menjadikannya tugas latar belakang di waktu yang sama. Untuk melakukan ini, kami menambahkan ampersand “&” di akhir baris perintah.
nohup ./long-proc &
Advertisement
Anda harus menekan “Enter” sekali lagi untuk kembali ke command prompt. Kami diberi tahu bahwa nomor tugas dari proses tersebut adalah 1—angka dalam tanda kurung “[]“— dan bahwa ID prosesnya adalah 13115.
Kita dapat menggunakan salah satu dari ini untuk menghentikan proses. “Ctrl+C” tidak akan berfungsi sekarang karena program tidak memiliki hubungan apa pun dengan jendela terminal atau shell.
Jika Anda lupa nomor pekerjaan, Anda dapat menggunakan perintah pekerjaan untuk membuat daftar tugas latar belakang yang telah diluncurkan dari jendela terminal itu.
jobs
Untuk mematikan tugas kita, kita dapat menggunakan perintah kill dan nomor pekerjaan, didahului dengan tanda persentase “%“, seperti ini:
kill %1
Jika Anda telah menutup jendela terminal, Anda harus menemukan ID proses dan gunakan itu dengan perintah kill. Perintah pgrep akan menemukan ID proses untuk proses yang cocok dengan petunjuk pencarian yang Anda berikan. Kami akan mencari nama proses.
pgrep long-proc
Sekarang kami dapat menggunakan ID proses untuk menghentikan proses.
kill 13115
Advertisement
Lain kali Anda menekan "Enter", Anda diberi tahu bahwa proses telah dihentikan.
Sekarang mari kita lihat apa yang dilakukan 't menghentikan proses. Kami akan meluncurkannya kembali, dan kemudian menutup jendela terminal.
nohup ./long-proc
Jika kami membuka jendela terminal baru dan mencari proses kami dengan pgrep, kami melihatnya masih berjalan. Menutup jendela terminal yang meluncurkan proses tidak berpengaruh.
pgrep long-proc
Dimungkinkan untuk meneruskan beberapa perintah ke nohup, tetapi biasanya lebih baik untuk meluncurkannya secara terpisah. Itu membuatnya lebih mudah untuk memanipulasi mereka sebagai pekerjaan latar belakang. Perintah tidak akan berjalan pada saat yang sama, perintah tersebut akan dijalankan satu demi satu. Eksekusinya tidak bersamaan, itu berurutan. Untuk menjalankannya secara bersamaan, Anda perlu meluncurkannya secara terpisah.
Setelah mengatakan bahwa, untuk meluncurkan beberapa proses sekaligus, gunakan nohup untuk meluncurkan shell Bash dan gunakan opsi -c (perintah) dengan string perintah. Gunakan tanda kutip tunggal “`” untuk membungkus daftar perintah dan ampersand ganda “&&” untuk memisahkan perintah.
nohup bash -c `ls /bin && ls /sbin`
Jika Anda menggunakan lebih sedikit untuk melihat file “nohup.out” , Anda akan melihat output dari proses pertama, kemudian output dari proses kedua.
less nohup.out
Advertisement
Output dari kedua perintah telah ditangkap di file “nohup.out”. Itu tidak saling terkait, output dari proses kedua hanya dimulai setelah proses pertama dihentikan.
Jika Anda ingin menggunakan file Anda sendiri alih-alih “nohup.out”, Anda dapat mengarahkan perintah ke file pilihan Anda.
nohup bash -c `ls /bin && ls /sbin` > myfile.txt
Perhatikan bahwa pesan tidak lagi mengatakan "menambahkan output ke nohupo.out", ia mengatakan "mengarahkan stderr ke stdout" dan kami mengarahkan stdout ke "myfile" kami .txt” file.
Kita dapat melihat ke dalam file “myfile.txt” dengan lebih sedikit.
less myfile.txt
Seperti sebelumnya, ini berisi output dari kedua perintah.
Lucu bagaimana riwayat utilitas terkadang membuatnya tampak seolah-olah tidak ada relevansinya dengan zaman modern. Perintah nohup adalah salah satunya. Sesuatu yang diciptakan untuk mengatasi pemutusan pada saluran serial masih berguna bagi pengguna Linux saat ini pada mesin yang sangat kuat.
TERKAIT:37 Perintah Linux Penting yang Harus Anda Ketahuibsp
Itulah berita seputar Cara Menggunakan Perintah nohup di Linux, semoga bermanfaat. Disadur dari HowToGeek.com.