Saya memiliki proses Java yang berjalan pada contoh RedHat Linux.
Masalahnya adalah ia terus muncul kembali setelah saya membunuhnya. Saya tidak yakin ke mana harus mencari. Saya sudah pergi ke crontab, tetapi tidak berhasil.
Saya telah melihat PPID, tetapi menunjuk ke init (1).
Adakah yang bisa saya ketahui sumbernya?
ps xf
memperlihatkan pohon proses? Seperti berdiri, kita memiliki sangat sedikit untuk melanjutkan.at
untuk melihat apakah ada yang itu?Jawaban:
Ada sejumlah kemungkinan (beberapa disebutkan dalam jawaban lain):
/etc/inittab
entri untuk layanan denganrespawn
arahan,Restart
opsi diatur ke nilai selainno
,respawn
arahan,monit
, atauAlat baru (khusus linux) yang menarik yang dapat memberikan lebih banyak wawasan tentang di mana proses dimulai adalah sysdig .
Sysdig menggunakan fitur tracepoint Kernel Linux untuk memberikan jumlah yang cepat, sistem yang luas
strace
.Misalnya, jika saya ingin melihat setiap proses dimulai
ls
, saya dapat mengeluarkan:Ketika
ls
dijalankan di suatu tempat, saya akan mendapatkan pesan seperti ini:Saya memotong informasi lingkungan yang dikembalikan, tetapi seperti yang Anda lihat, di PTT saya dapat melihat nama dan pid dari program yang memanggil execve.
execve
adalah panggilan sistem yang digunakan di Linux yang digunakan untuk mengeksekusi perintah baru (semua panggilan exec lainnya hanya antarmuka untuk mengeksekusi).sumber
Saya yakin Anda bisa menggunakannya
pstree
. Anda dapat menentukan perintah sebagai,Di atas akan memberi Anda daftar semua orang tua dari aplikasi java.
sumber
Anda dapat melihat PPID-nya (ID proses induk):
Setelah Anda mendapatkan PPID (kolom kedua) dari proses Java Anda, gunakan
ps
lagi untuk menemukan proses terkait:Sunting : jika orang tua adalah 1 (init), maka orang tua pertama dari proses Java Anda meninggal tepat setelah "melahirkan" (betapa sedihnya). Karena itu, Anda tidak dapat menggunakan hierarki proses saat ini untuk menemukannya. Hal pertama yang saya sarankan Anda lakukan adalah memeriksa
ps -ef
. Anda mungkin menemukan pelakunya hanya dengan membaca hasilnya.Kemudian, lihatlah crontab (Anda sudah melakukannya, tetapi tidak sakit):
Ini akan membutuhkan hak akses root.
Masih tidak dapat melihat proses Java dijadwalkan? Sial. Mari kita coba yang lain. Jika proses Java Anda ada sejak boot, lihatlah program yang sudah skelud pada saat boot. Saya akan menyarankan sesuatu seperti ...
Jika Anda masih tidak dapat menemukan apa pun maka ... Yah saya akui saya kehabisan ide. Anda harus benar-benar melihat lagi
ps -ef
, dan mencari proses yang terkait dengan program berbasis Java. Anda harus menemukan sebuah daemon, atau "peluncur", yang bertanggung jawab untuk respawning terus-menerus dari proses Java Anda.sumber
init
, mereka setidaknya anak yatim . Thestate
specifier untukps
akan menunjukkan jika mereka zombie (misalnya,ps -eo pid,ppid,state,comm
); negara akanZ
.Jika Anda tidak tahu siapa orang tuanya, Anda harus mencari pelacak sistem seperti auditd
Anda akan mengaktifkan pencatatan dengan:
dan kemudian di
/var/log/audit/audit.log
temukan baris seperti:(Dipecah menjadi beberapa baris untuk readibility). Anda tertarik
exe="/bin/dash"
dan / ataupid=18182
mengidentifikasi proses pemerah pipi yang ingin Anda cari, danppid=17176
yang mengidentifikasi induk mana yang mengeksekusinya.sumber