Perintah nohup: cara pakai, nohup.out, dan tetap berjalan setelah terminal ditutup

Lingkungan ujiKeluarga RHELAlmaLinux 9.8coreutils 8.32akun rootDebian 12 · coreutils 9.1 akun biasaDiperiksa 2026-11-05
Perintah Proses · Penjadwalan TugasnohupLokasi/usr/bin/nohup
Tetap berjalan meski terminal ditutup

Agar pekerjaan tetap berjalan meski Anda menutup terminal atau koneksi SSH terputus, jalankan dengan perintah nohup. nohup menjalankan perintah dengan membuatnya mengabaikan sinyal putus (SIGHUP) yang datang saat terminal ditutup. Saat sleep dengan nohup dan sleep tanpa nohup dijalankan bersamaan di server AlmaLinux 9 lalu terminal ditutup, hanya yang dijalankan dengan nohup yang tetap berjalan.

Output di bawah berasal dari server AlmaLinux 9.8 (akun root) dan server Debian 12 (akun biasa). Sebagai ganti pekerjaan yang berjalan lama, yang dijalankan adalah sleep, dan saat menghentikannya hanya PID yang diterima saat menjalankan yang disebutkan. Waktu ditampilkan dalam UTC.

1️⃣ Cara memakai perintah nohup

  • ↪️ Tanda & di akhir dan yang terjadi saat terminal ditutup

nohup ditaruh di depan perintah yang akan dijalankan, dan tanda & di akhir perintah menentukan eksekusi di latar belakang. Menurut manual resmi GNU, nohup sendiri tidak mengirim perintah ke latar belakang, jadi tanpa & prompt baru kembali setelah perintah selesai.

nohup sleep 300 &
[1] 3431609
nohup: ignoring input and appending output to 'nohup.out'

[1] adalah nomor job, dan 3431609 adalah PID proses yang dijalankan. Pesan yang muncul berikutnya memberi tahu bahwa input keyboard tidak dibaca dan output ditambahkan ke file nohup.out.

PID job yang baru saja dijalankan tersimpan di $!. Periksa dengan [echo $!] tepat setelah menjalankannya lalu catat; nomor yang sama itulah yang dipakai untuk melihat status atau menghentikannya.

echo $!
3431609

Saat terminal ditutup, shell menerima sinyal putus dan mengirim sinyal yang sama ke job yang dijalankannya (menurut manual resmi Bash). Untuk memastikan perilaku ini, di terminal baru dijalankan bersamaan [nohup sleep 300 &] dan, tanpa nohup, [sleep 301 &].

sleep 301 &
[2] 3432892
jobs -l
[1]- 3432883 Running                 nohup sleep 300 &
[2]+ 3432892 Running                 sleep 301 &

Saat kedua job berstatus Running, jendela terminal ditutup, lalu kedua PID diperiksa dengan ps dari shell lain.

ps -p 3432883,3432892 -o pid,stat,etime,cmd
    PID STAT     ELAPSED CMD
3432883 S          00:05 sleep 300

Hanya sleep 300 yang dijalankan dengan nohup yang tersisa; sleep 301 yang dijalankan tanpa nohup ikut berhenti saat terminal ditutup.

Proses yang dijalankan dengan nohup seperti ponsel yang mode Jangan Ganggu-nya aktif.

nohup adalah perintah dari paket coreutils. Versi yang terpasang dapat dilihat di baris pertama --version. Server AlmaLinux 9.8 memakai 8.32, server Debian 12 memakai 9.1.

nohup --version | head -1
nohup (GNU coreutils) 8.32
nohup --version | head -1
nohup (GNU coreutils) 9.1

2️⃣ nohup.out dan pengalihan output

  • ↪️ Menentukan file log dan /dev/null

Jika Anda tidak menentukan ke mana output pergi, nohup menambahkan output perintah ke nohup.out di folder saat ini. nohup.out yang baru dibuat berukuran 0 byte, dengan izin -rw-------, yang hanya bisa dibaca dan ditulis oleh pengguna yang membuatnya.

ls -l nohup.out
-rw------- 1 root root 0 Oct 28 23:04 nohup.out

Manual resmi GNU menjelaskan bahwa nohup membuat nohup.out agar hanya pengguna yang membuatnya yang bisa membaca dan menulisnya, apa pun pengaturan umask. Jika tidak bisa menulis ke folder saat ini, nohup menulis ke $HOME/nohup.out di folder home, dan jika di sana pun tidak bisa, perintah tidak dijalankan.

Saat perintah yang menghasilkan output dijalankan dengan nohup, output tetap ada di nohup.out setelah perintah selesai.

nohup sh -c 'echo start; sleep 2; echo end' &
[1] 3431985
nohup: ignoring input and appending output to 'nohup.out'
cat nohup.out
start
end
[1]+  Done                    nohup sh -c 'echo start; sleep 2; echo end'

Done di baris terakhir adalah pemberitahuan shell bahwa job sudah selesai. nohup.out tidak dibuat ulang setiap kali dijalankan, tetapi ditambahkan di akhir file yang sama, jadi jika Anda menjalankan beberapa job dari folder yang sama, output-nya bercampur dalam satu file.

Agar setiap job punya log sendiri, tentukan file output dengan > dan kirim juga output error ke file yang sama dengan 2>&1.

nohup sh -c 'echo start; sleep 300' > job.log 2>&1 &
[1] 3432059
cat job.log
nohup: ignoring input
start

Setelah 2>&1 ikut ditambahkan, terminal hanya menampilkan nomor job dan PID, dan pesan nohup [nohup: ignoring input] tercatat di baris pertama file log.

Jika Anda hanya menambahkan > tanpa 2>&1, terminal menampilkan pesan bahwa output error dialihkan ke file output standar.

nohup sleep 300 > job2.log &
[2] 3432097
nohup: ignoring input and redirecting stderr to stdout

Output dari job yang tidak perlu disimpan dikirim ke /dev/null. Dalam hal ini pun terminal hanya menampilkan nomor job dan PID.

nohup sleep 300 > /dev/null 2>&1 &
[3] 3432137

Tabel di bawah menunjukkan ke mana output pergi dan pesan apa yang muncul di terminal untuk keempat cara menjalankan.

Cara menjalankanTujuan outputPesan di terminal
nohup perintah &nohup.out di folder saat ininohup: ignoring input and appending output to 'nohup.out'
nohup perintah > file &File yang ditentukan (termasuk output error)nohup: ignoring input and redirecting stderr to stdout
nohup perintah > file 2>&1 &File yang ditentukanTidak ada (pesan ada di baris pertama file)
nohup perintah > /dev/null 2>&1 &DibuangTidak ada

3️⃣ Memeriksa dan menghentikan proses nohup

  • ↪️ jobs, ps, kill

Daftar jobs hanya menampilkan job yang dijalankan dari shell saat ini, jadi setelah menutup terminal dan tersambung lagi, periksa proses nohup dengan ps -p dan PID-nya. Selama Anda masih di shell yang sama, jobs -l menampilkan nomor job, PID, dan status sekaligus.

jobs -l
[1]+ 3431609 Running                 nohup sleep 300 &

Jika Anda menulis PID setelah ps -p dan memilih kolom dengan -o, hanya baris proses itu yang muncul. S pada STAT berarti proses sedang tidur sambil menunggu suatu peristiwa, dan ELAPSED adalah waktu sejak proses dimulai.

ps -p 3431609 -o pid,stat,etime,cmd
    PID STAT     ELAPSED CMD
3431609 S          00:03 sleep 300

Untuk menghentikannya, gunakan kill diikuti PID.

kill 3431609

kill tidak menampilkan apa pun, dan saat jobs dijalankan berikutnya, job itu muncul sebagai Terminated lalu hilang dari daftar.

jobs
[1]+  Terminated              nohup sleep 300

Saat ps dijalankan lagi dengan PID yang sama, hanya baris judul yang muncul, sehingga terkonfirmasi bahwa proses sudah berhenti.

ps -p 3431609 -o pid,stat,etime,cmd
    PID STAT     ELAPSED CMD

nohup hanya mengabaikan sinyal putus, jadi mengirim sinyal yang sama langsung dengan [kill -HUP] pun tidak menghentikannya. kill -HUP dikirim ke sleep 305 yang dijalankan dengan nohup dan ke sleep 306 yang dijalankan tanpa nohup.

kill -HUP 3437119 3437128

Pemeriksaan berikutnya dengan jobs -l menunjukkan hanya yang dengan nohup yang masih Running, sedangkan sleep 306 berhenti dengan Hangup.

jobs -l
[1]- 3437119 Running                 nohup sleep 305 &
[2]+ 3437128 Hangup                  sleep 306

Jika kill tidak diberi sinyal, ia mengirim SIGTERM, jadi job yang dijalankan dengan nohup pun berhenti dengan [kill PID].

4️⃣ Perbandingan perintah nohup dengan disown, dan opsi

  • ↪️ disown -h, kapan memilih tmux, dan ringkasan opsi

🔲 Perbandingan nohup dan disown

disown adalah perintah bawaan bash untuk job yang sudah berjalan: dipakai untuk melepas belakangan job yang dijalankan dengan & tanpa nohup dari sinyal putus terminal. disown tidak mengalihkan output ke nohup.out, jadi untuk job yang menghasilkan output, tentukan tujuan output dengan > file saat menjalankannya.

Menurut manual resmi Bash, disown tanpa opsi mengeluarkan job dari daftar jobs, sedangkan disown -h membiarkannya di daftar dan hanya mencegah sinyal putus dikirim kepadanya. Pertama, sleep 302 dijalankan lalu disown dijalankan.

sleep 302 &
[1] 3433230
disown

disown tidak menampilkan apa pun, dan jobs -l yang dijalankan sesudahnya juga kosong.

jobs -l

Berikutnya, sleep 303 dijalankan dan disown -h dijalankan pada nomor job %1.

sleep 303 &
[1] 3433343
disown -h %1

Pemeriksaan dengan jobs -l menunjukkan job itu tetap ada di daftar.

jobs -l
[1]+ 3433343 Running                 sleep 303 &

Ditambah satu lagi sleep 304 tanpa penanganan apa pun, terminal ditutup, lalu ketiga PID diperiksa dari shell lain.

sleep 304 &
[2] 3433474
ps -p 3433230,3433343,3433474 -o pid,stat,etime,cmd
    PID STAT     ELAPSED CMD
3433230 S          00:11 sleep 302
3433343 S          00:08 sleep 303

Dua job yang diberi disown dan disown -h tetap ada, dan hanya sleep 304 yang tanpa penanganan yang berhenti. Perbandingan keempat cara sebagai berikut.

CaraKapan dipakaiDaftar jobsSetelah terminal ditutupOutput
nohup perintah &Saat menjalankanTetap adaTetap adanohup.out atau file yang ditentukan
perintah & lalu disownSetelah dijalankanDilewatiTetap adaTidak diubah
perintah & lalu disown -hSetelah dijalankanTetap adaTetap adaTidak diubah
Hanya perintah &—Tetap adaSudah berakhirTidak diubah

Untuk pekerjaan yang perlu memanggil kembali layar sesi dan lanjut mengetik, multiplexer terminal seperti tmux lebih cocok; untuk pekerjaan yang dijalankan sekali dan hanya diambil hasilnya dari file, nohup sudah cukup.

🔲 Opsi perintah nohup

📌 Opsi utama: hasil dari artikel ini

OpsiFungsiHasil di artikel ini
--versionMenampilkan informasi versi lalu keluarServer AlmaLinux 9.8: nohup (GNU coreutils) 8.32, server Debian 12: nohup (GNU coreutils) 9.1

📎 Opsi lainnya: menurut manual resmi

OpsiFungsi
--helpMenampilkan bantuan lalu keluar

🔲 Simulator perintah nohup

Di simulator di bawah, Anda bisa menjalankan job dengan nohup, menutup terminal dan tersambung lagi dengan chip 🔌, lalu melihat sendiri proses mana yang tersisa.

Simulator perintah nohupcoreutils 8.32
[root@server work]#
Hanya berjalan di dalam browser dan tidak menjalankan proses sungguhan. Waktu sleep mengikuti jam sungguhan, dan ↑↓ memanggil kembali perintah yang sudah diketik.

🔢 FAQ & Konten yang Direkomendasikan

Menurut manual resmi GNU, nohup keluar dengan 125 jika nohup sendiri gagal, 126 jika perintah ditemukan tetapi tidak bisa dijalankan, dan 127 jika perintah tidak ditemukan. Di server AlmaLinux 9, mengetik nohup saja tanpa perintah menghasilkan 125, ./job.sh tanpa izin eksekusi 126, dan perintah yang tidak ada, nosuchcmd, 127.

nohup tidak mengubah nilai nice, jadi gunakan nice bersamanya, seperti [nohup nice -n 10 sleep 307 &]. Saat sleep yang dijalankan dengan cara ini diperiksa dengan ps, kolom NI menunjukkan 10 dan STAT menunjukkan SN, dengan N yang menandakan prioritas rendah.

Perintah nohup hanya punya dua opsi, [--help] dan [--version]. Menurut manual resmi GNU, opsi ditulis sebelum perintah yang akan dijalankan.

ℹ️ Pemberitahuan Afiliasi
Konten di situs ini berisi tautan afiliasi. Jika pengunjung membeli produk atau layanan melalui tautan tersebut, situs ini menerima komisi dari penjual. Harga yang dibayar pembeli(turun saat ada diskon promo ↓), tidak naik karena hal ini. Harga, diskon, dan informasi stok yang ditampilkan berlaku pada saat penulisan dan bisa berbeda dengan kondisi sebenarnya, jadi pastikan kembali di situs penjual sebelum membeli. Pemilihan dan penilaian produk dibuat berdasarkan standar kami sendiri, dan ada tidaknya komisi tidak memengaruhi urutan maupun isi penilaian.

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *

Buktikan bahwa Anda manusia: 10   +   1   =