pekerjaan -l harus memberi Anda pid untuk daftar proses nohup.bunuh (-9) mereka dengan lembut.;)
Saya menggunakan red hat linux di server VPS (dan melalui SSH - putty), bagi saya yang berikut ini berfungsi:
Pertama, Anda mencantumkan semua proses yang berjalan:
ps -ef
Kemudian di kolom pertama Anda menemukan nama pengguna Anda; Saya menemukannya tiga kali sebagai berikut:
- Salah satunya adalah koneksi SSH
- Yang kedua adalah koneksi FTP
- Yang terakhir adalah proses nohup
Kemudian di kolom kedua Anda dapat menemukan PID dari proses nohup dan Anda hanya mengetik:
kill PID
(tentu saja mengganti PID dengan PID proses nohup)
Dan itu dia!
Saya harap jawaban ini bermanfaat bagi seseorang yang saya juga sangat baru mengenal bash dan SSH, tetapi menemukan 95% pengetahuan yang saya butuhkan di sini :)
misalkan saya menjalankan skrip ruby di latar belakang dengan perintah di bawah ini
nohup ruby script.rb &
maka saya bisa mendapatkan pid dari proses latar belakang di atas dengan menentukan nama perintah. Dalam kasus saya, perintahnya adalah ruby.
ps -ef | grep ruby
keluaran
ubuntu 25938 25742 0 05:16 pts/0 00:00:00 ruby test.rb
Sekarang Anda dapat dengan mudah menghentikan proses dengan menggunakan perintah kill
kill 25938
Saat menggunakan nohup
dan Anda meletakkan tugas di latar belakang, operator latar belakang (&
) akan memberi Anda PID pada prompt perintah. Jika rencana Anda adalah mengelola proses secara manual, Anda dapat menyimpan PID tersebut dan menggunakannya nanti untuk mematikan proses jika diperlukan, melalui kill PID
atau kill -9 PID
(jika Anda perlu memaksa membunuh). Alternatifnya, Anda dapat menemukan PID nanti dengan ps -ef | grep "command name"
dan temukan PID dari sana. Perhatikan bahwa nohup
kata kunci/perintah itu sendiri tidak muncul di ps
output untuk perintah yang dimaksud.
Jika Anda menggunakan skrip, Anda dapat melakukan hal seperti ini di skrip:
nohup my_command > my.log 2>&1 &
echo $! > save_pid.txt
Ini akan menjalankan my_command
menyimpan semua output ke my.log
(dalam skrip, $!
mewakili PID dari proses terakhir yang dijalankan). 2
adalah deskriptor file untuk kesalahan standar (stderr
) dan 2>&1
memberi tahu shell untuk merutekan keluaran kesalahan standar ke keluaran standar (deskriptor file 1
). Ini membutuhkan &1
sehingga shell tahu itu adalah deskriptor file dalam konteks itu, bukan hanya file bernama 1
. 2>&1
diperlukan untuk merekam pesan kesalahan apa pun yang biasanya ditulis ke kesalahan standar ke dalam my.log
kami file (yang berasal dari keluaran standar). Lihat Pengalihan I/O untuk detail selengkapnya tentang penanganan pengalihan I/O dengan shell.
Jika perintah mengirimkan keluaran secara teratur, Anda dapat memeriksa keluaran sesekali dengan tail my.log
, atau jika Anda ingin mengikutinya "langsung", Anda dapat menggunakan tail -f my.log
. Terakhir, jika Anda perlu menghentikan prosesnya, Anda dapat melakukannya melalui:
kill -9 `cat save_pid.txt`
rm save_pid.txt