Saya sedang menjalankan proses nohup di server. Ketika saya mencoba untuk membunuhnya, konsol dempul saya malah ditutup.
inilah cara saya mencoba menemukan ID proses:
ps -ef |grep nohup
ini adalah perintah untuk membunuh
kill -9 1787 787
Saya sedang menjalankan proses nohup di server. Ketika saya mencoba untuk membunuhnya, konsol dempul saya malah ditutup.
inilah cara saya mencoba menemukan ID proses:
ps -ef |grep nohup
ini adalah perintah untuk membunuh
kill -9 1787 787
Jawaban:
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 itu dan menggunakannya nanti untuk mematikan proses itu jika perlu, melalui kill PID
atau kill -9 PID
(jika Anda perlu memaksa membunuh). Atau, Anda dapat menemukan PID nanti dengan ps -ef | grep "command name"
menemukan dan menemukan PID dari sana. Perhatikan bahwa nohup
kata kunci / perintah itu sendiri tidak muncul dalam ps
output untuk perintah yang dimaksud.
Jika Anda menggunakan skrip, Anda dapat melakukan sesuatu seperti:
nohup my_command > my.log 2>&1 &
echo $! > save_pid.txt
Ini akan menjalankan my_command
penyimpanan semua output my.log
(dalam skrip, $!
mewakili PID dari proses terakhir yang dijalankan). Ini 2
adalah deskriptor file untuk kesalahan standar ( stderr
) dan 2>&1
memberi tahu shell untuk merutekan output kesalahan standar ke output standar (deskriptor file 1
). Ini membutuhkan &1
agar shell tahu itu deskriptor file dalam konteks itu, bukan hanya file bernama 1
. The 2>&1
diperlukan untuk menangkap pesan kesalahan yang biasanya ditulis untuk kesalahan standar ke kami my.log
berkas (yang berasal dari output standar). Lihat I / O Redirection untuk detail lebih lanjut tentang penanganan redirection I / O dengan shell.
Jika perintah mengirim output secara teratur, Anda dapat memeriksa output sesekali dengan tail my.log
, atau jika Anda ingin mengikutinya "langsung" yang dapat Anda gunakan tail -f my.log
. Terakhir, jika Anda perlu mematikan proses, Anda dapat melakukannya melalui:
kill -9 `cat save_pid.txt`
rm save_pid.txt
nohup
per se, yang mencetak PID, itu adalah final &
yang melatarbelakanginya, misalnya ls &
akan menunjukkan PID untuk menjalankanls
2
adalah deskriptor file "kesalahan standar". >
adalah pengalihan shell, dan &1
merupakan deskriptor file "output standar" (yang &
diperlukan di sini sehingga shell tidak akan berpikir saya merujuk ke file bernama 1
). Jadi 2 > &1
pengalihan output kesalahan standar ke input standar. Karena cara sebelumnya > my.log
untuk mengarahkan output standar my.log
, kita perlu cara untuk memastikan bahwa pesan kesalahan juga masuk my.log
. 2 > &1
memastikan bahwa kesalahan seperti itu menuju ke output standar, yang selanjutnya menuju ke my.log
. Lihat I / O Redirection .
echo $!
memberi saya pid dari nohup alih-alih proses menelurkan: paste.fedoraproject.org/428697/99695314
&
bertindak sebagai pembatas perintah sehingga Anda dapat mencoba sh -c "nohup my_command > my.log 2>&1 & echo $! > save_pid.txt"
,. Mungkin berhasil, tetapi saya belum mencobanya.
Saya menggunakan linux topi merah pada server VPS (dan melalui SSH - dempul), bagi saya yang berikut ini berfungsi:
Pertama, Anda mendaftar semua proses yang berjalan:
ps -ef
Kemudian di kolom pertama Anda menemukan nama pengguna Anda; Saya menemukannya tiga kali berikut:
Kemudian di kolom kedua Anda dapat menemukan PID dari proses nohup dan Anda hanya mengetik:
kill PID
(mengganti PID dengan PID proses nohup tentu saja)
Dan itu dia!
Saya harap jawaban ini akan berguna bagi seseorang saya juga sangat baru untuk bash dan SSH, tetapi menemukan 95% dari 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, perintah 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 mematikan proses dengan menggunakan perintah kill
kill 25938
ps -ef
dan kill
keduanya tercakup dengan baik di atas, jadi apa bagian yang baru?
jobs -l harus memberi Anda pid untuk daftar proses nohup. bunuh (-9) mereka dengan lembut. ;)
kill -9
kecuali Anda tahu bahwa sinyal reguler tidak berfungsi.
Ini berfungsi di Ubuntu
Ketik ini untuk mencari tahu PID
ps aux | grep java
Semua proses yang berjalan sehubungan dengan java akan ditampilkan
Dalam kasus saya adalah
johnjoe 3315 9.1 4.0 1465240 335728 ? Sl 09:42 3:19 java -jar batch.jar
Sekarang bunuh saja kill -9 3315
Proses zombie akhirnya berhenti.
Misalkan Anda menjalankan program java dengan nohup, Anda bisa mendapatkan proses java id
`ps aux | grep java`
keluaran
xxxxx 9643 0.0 0.0 14232 968 pts/2
maka Anda dapat mematikan proses dengan mengetik
sudo kill 9643
atau katakanlah Anda perlu mematikan semua proses java lalu gunakan saja
sudo killall java
perintah ini membunuh semua prosesor java. Anda dapat menggunakan ini dengan proses. cukup beri nama proses di akhir perintah
sudo killall {processName}
Saya mulai server django dengan perintah berikut.
nohup manage.py runserver <localhost:port>
Ini bekerja pada CentOS:
:~ ns$netstat -ntlp
:~ ns$kill -9 PID
process not found
kebingungan dengan nohup.
Hari ini saya bertemu dengan masalah yang sama. Dan karena sudah lama sekali, saya benar-benar lupa perintah mana yang saya gunakan dan kapan. Saya mencoba tiga metode:
ps -ef
perintah. Ini menunjukkan waktu Anda memulai proses Anda, dan sangat mungkin bahwa Anda nohup perintah Anda sebelum Anda menutup ssh (tergantung pada Anda). Sayangnya saya tidak berpikir perintah terbaru adalah perintah yang saya jalankan menggunakan nohup, jadi ini tidak berfungsi untuk saya.ps -ef
perintah. Ini berarti ID Proses Induk, ID proses yang menciptakan proses. Ppid adalah 1 di ubuntu untuk proses yang menggunakan nohup untuk dijalankan. Kemudian Anda dapat menggunakan ps --ppid "1"
untuk mendapatkan daftar, dan periksa TIME (total waktu CPU yang digunakan proses Anda) atau CMD untuk menemukan PID proses.lsof -i:port
jika proses tersebut menempati beberapa port, dan Anda akan mendapatkan perintah. Kemudian seperti jawaban di atas, gunakan ps -ef | grep command
dan Anda akan mendapatkan PID.Setelah Anda menemukan PID proses, maka dapat digunakan kill pid
untuk mengakhiri proses.
nohup
dan menggunakannya nanti untukkill
, atau menemukan proses dengan nama perintah dips -ef
output dan mendapatkan PID dari itu. Anda harus mencari nama perintah, bukannohup
.